簡體   English   中英

如何在C中分配和釋放對齊的內存

[英]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_memalignmemalign的標准替代品,正如您所提到的那樣已過時。

你用的是什么編譯器? 如果您使用的是MSVC,則可以嘗試使用_aligned_malloc()_aligned_free()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM