Linux 对齐内存分配,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_malloc分配的任何内容调用my_NUMA_free.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值