[英]How to allocate and free aligned memory in C
如何分配與C中特定邊界對齊的內存(例如,緩存行邊界)? 我正在尋找malloc / free類似的實現,理想情況下盡可能便攜 - 至少在32位和64位架構之間。
編輯添加:換句話說,我正在尋找一些表現得像(現在過時的?) memalign函數的東西,它可以免費使用。
這是一個解決方案,它封裝對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]);
}
使用posix_memalign
/ free
。
int posix_memalign(void **memptr, size_t alignment, size_t size);
void* ptr;
int rc = posix_memalign(&ptr, alignment, size);
...
free(ptr)
posix_memalign
是memalign
的標准替代品,正如您所提到的那樣已過時。
你用的是什么編譯器? 如果您使用的是MSVC,則可以嘗試使用_aligned_malloc()
和_aligned_free()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.