2016-07-24 114 views
1

malloc不允許任意對齊。我們可以做到這一點,但我們最終得到了不同的指針位置。免費要求原件。調整malloc指針

是否有任何方式通知malloc新指針,以便它可以自我調整,我們將不必存儲舊的指針/偏移量?

+0

你的意思是相當於告訴'malloc'對齊? – Downvoter

+0

如果你改變了你的指針,那麼就沒有辦法記住它或者恢復它,從而「釋放」它。 –

+0

@Downvoter或多或少。我不能使用memaligned或類似的東西。我無法從舊的計算原始。 – AbstractDissonance

回答

2

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個前面的字節,從指針中減去它們並釋放結果。

1

好吧,我相信C11有這樣的野獸

Defined in header <stdlib.h> 

void *aligned_alloc(size_t alignment, size_t size);