2828#ifndef _ALIGNED_ALLOC_H_
2929#define _ALIGNED_ALLOC_H_
3030
31- #include < stdlib.h>
3231#include < malloc.h>
33- #include < windows.h>
34- #include " winerrmsg.h"
35-
3632
3733namespace cpptask
3834{
39- #ifdef __GNUC__
40- #ifndef HAVE_PROCESSOR_CACHE_TYPE
41- typedef enum _PROCESSOR_CACHE_TYPE
42- {
43- CacheUnified,
44- CacheInstruction,
45- CacheData,
46- CacheTrace
47- } PROCESSOR_CACHE_TYPE ;
48- #endif
49-
50- #ifndef HAVE_CACHE_DESCRIPTOR
51- typedef struct _CACHE_DESCRIPTOR
52- {
53- BYTE Level;
54- BYTE Associativity;
55- WORD LineSize;
56- DWORD Size;
57- PROCESSOR_CACHE_TYPE Type;
58- } CACHE_DESCRIPTOR , *PCACHE_DESCRIPTOR ;
59- #endif
60-
61- #ifndef HAVE_LOGICAL_PROCESSOR_RELATIONSHIP
62- typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
63- {
64- RelationProcessorCore,
65- RelationNumaNode,
66- RelationCache,
67- RelationProcessorPackage,
68- RelationGroup,
69- RelationAll = 0xffff ,
70- } LOGICAL_PROCESSOR_RELATIONSHIP ;
71- #endif
72-
73- #ifndef HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION
74- typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
75- {
76- ULONG_PTR ProcessorMask;
77- LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
78- _ANONYMOUS_UNION
79- union
80- {
81- struct
82- {
83- BYTE flags;
84- } ProcessorCore;
85- struct
86- {
87- DWORD NodeNumber;
88- } NumaNode;
89- CACHE_DESCRIPTOR Cache;
90- ULONGLONG Reserved[2 ];
91- } DUMMYUNIONNAME ;
92- } SYSTEM_LOGICAL_PROCESSOR_INFORMATION , *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ;
93- #endif
94- #endif
95-
96- typedef BOOL (WINAPI *LPFN_GLPI )(
97- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ,
98- PDWORD );
99-
100- inline size_t GetCacheLineSize ()
101- {
102- static size_t line_size = 0 ;
103- if (line_size == 0 )
104- {
105- auto mHandle = GetModuleHandle (TEXT (" kernel32" ));
106- if (mHandle == 0 )
107- {
108- throw Exception (" Can't get handle to kernel32 module - " + GetLastWinErrMsg ());
109- }
110-
111- LPFN_GLPI glpi = (LPFN_GLPI ) GetProcAddress (mHandle , " GetLogicalProcessorInformation" );
112- if (glpi == 0 )
113- {
114- throw Exception (" Can't get address of GetLogicalProcessorInformation function - " + GetLastWinErrMsg ());
115- }
116-
117- DWORD buffer_size = 0 ;
118- glpi (0 , &buffer_size);
119-
120- if (buffer_size > 0 )
121- {
122- std::vector<char > bufferData (buffer_size, 0 );
123- SYSTEM_LOGICAL_PROCESSOR_INFORMATION * buffer = reinterpret_cast <SYSTEM_LOGICAL_PROCESSOR_INFORMATION *>(bufferData.data ());
124-
125- glpi (&buffer[0 ], &buffer_size);
126-
127- for (int i = 0 ; i != buffer_size / sizeof (SYSTEM_LOGICAL_PROCESSOR_INFORMATION ); ++i)
128- {
129- if (buffer[i].Relationship == RelationCache && buffer[i].Cache .Level == 1 )
130- {
131- line_size = buffer[i].Cache .LineSize ;
132- break ;
133- }
134- }
135- }
136- }
137- assert (line_size != 0 );
138- return line_size;
139- }
14035
141- inline void * AlignedAlloc (size_t size, size_t align_size)
36+ inline void * aligned_alloc (size_t size, size_t align_size)
14237{
14338#ifdef __GNUC__
14439 return __mingw_aligned_malloc (size, align_size);
@@ -147,7 +42,7 @@ inline void* AlignedAlloc(size_t size, size_t align_size)
14742#endif
14843}
14944
150- inline void AlignedFree (void * ptr)
45+ inline void free (void * ptr)
15146{
15247#ifdef __GNUC__
15348 return __mingw_aligned_free (ptr);
0 commit comments