numa内存 分配 Linux,NUMA感知的高速缓存对齐的内存分配

小编典典

如果您只是希望围绕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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值