如何分配与 C 中特定边界(例如缓存行边界)对齐的内存?我正在寻找类似 malloc/free 的实现,理想情况下应尽可能可移植——至少在 32 位和 64 位架构之间。
编辑添加:换句话说,我正在寻找一些行为类似的东西(现在已经过时了?)memalign http://www.mkssoftware.com/docs/man3/memalign.3.asp函数,可以使用 free 来释放。
这里有一个解决方案,它封装了对 malloc 的调用,分配一个更大的缓冲区用于对齐目的,并将原始分配的地址存储在对齐缓冲区之前,以便稍后调用 free。
// cache line
#define ALIGN 64
void *aligned_malloc(int size) {
void *mem = malloc(size+ALIGN+sizeof(void*));
void **ptr = (void**)((uintptr_t)(mem+ALIGN+sizeof(void*)) & ~(ALIGN-1));
ptr[-1] = mem;
return ptr;
}
void aligned_free(void *ptr) {
free(((void**)ptr)[-1]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)