malloc不允許任意對齊。我們可以做到這一點,但我們最終得到了不同的指針位置。免費要求原件。調整malloc指針
是否有任何方式通知malloc新指針,以便它可以自我調整,我們將不必存儲舊的指針/偏移量?
malloc不允許任意對齊。我們可以做到這一點,但我們最終得到了不同的指針位置。免費要求原件。調整malloc指針
是否有任何方式通知malloc新指針,以便它可以自我調整,我們將不必存儲舊的指針/偏移量?
C11引入了aligned_alloc
,它支持指定對齊。它是定義支持對齊的實現,但在POSIX上它應該類似於posix_memalign(3)
,它支持兩倍的任何兩倍,即sizeof(void*)
的倍數。
還可以考慮,如果常規malloc
就足夠了。對於所有分配,malloc
具有_Alignof(max_align_t)
的對齊。
如果C11不可用,則有posix_memalign(3)
。如果你在Windows上,有一個_aligned_alloc
從MSVC 2015開始或使用VirtualAlloc
並分配一個頁面對齊的緩衝區。
如果這兩項都不起作用,您將不得不在malloc
之上推出自己的解決方案。獲取下一個對齊的地址,保存前兩個字節的對齊。當調用你的自由包裝器時,得到2個前面的字節,從指針中減去它們並釋放結果。
好吧,我相信C11有這樣的野獸
Defined in header <stdlib.h>
void *aligned_alloc(size_t alignment, size_t size);
你的意思是相當於告訴'malloc'對齊? – Downvoter
如果你改變了你的指針,那麼就沒有辦法記住它或者恢復它,從而「釋放」它。 –
@Downvoter或多或少。我不能使用memaligned或類似的東西。我無法從舊的計算原始。 – AbstractDissonance