如果您只是希望围绕NUMA分配器获得对齐功能,则可以轻松构建自己的对齐功能。
想法是将未对齐的
malloc()空间称为更多空间。然后返回第一个对齐的地址。为了释放它,您需要将基址存储在已知位置。
这是一个例子。只需用适当的名称替换名称:
pint // An unsigned integer that is large enough to store a pointer.NUMA_malloc // The NUMA malloc functionNUMA_free // The NUMA free functionvoid* my_NUMA_malloc(size_t bytes,size_t align, ){ // The NUMA malloc function void *ptr = numa_malloc( (size_t)(bytes + align + sizeof(pint)), ); if (ptr == NULL) return NULL; // Get aligned return address pint *ret = (pint*)((((pint)ptr + sizeof(pint)) & ~(pint)(align - 1)) + align); // Save the free pointer ret[-1] = (pint)ptr; return ret;}void my_NUMA_free(void *ptr){ if (ptr == NULL) return; // Get the free pointer ptr = (void*)(((pint*)ptr)[-1]); // The NUMA free function numa_free(ptr); }要使用此功能,您需要调用
my_NUMA_free分配的任何内容
my_NUMA_malloc。



