小编典典
如果您只是希望围绕NUMA分配器获得对齐功能,则可以轻松构建自己的对齐功能。
想法是将未对齐的malloc()空间称为更多空间。然后返回第一个对齐的地址。为了释放它,您需要将基址存储在已知位置。
这是一个例子。只需用适当的名称替换名称:
pint // An unsigned integer that is large enough to store a pointer.
NUMA_malloc // The NUMA malloc function
NUMA_free // The NUMA free function
void* my_NUMA_malloc(size_t bytes,size_t align, /* NUMA parameters */ ){
// The NUMA malloc function
void *ptr = numa_malloc(
(size_t)(bytes + align + sizeof(pint)),
/* NUMA parameters */
);
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。
2020-06-07