簡體   English   中英

內存對齊和分配與malloc

[英]memory alignment and allocation vs malloc

我正在用C寫一個庫函數,它將返回32位的塊。 我為此使用malloc()。 以下內容將始終保證以連續的方式分配32位內存嗎?

char *base_ptr = (char*)malloc(4*sizeof(char))?

我如何確保它在4字節邊界上分配?

是。 您將獲得一個連續的4字節內存塊。

不是32個字節。 如果您指的是32位,則無法保證,但是在典型的台式機上, CHAR_BIT為8,然后,是的,您的4個字節等於32位。

是的,它將是連續的-但不必在4字節邊界上分配它。

那是4個字節。 如果要連續32個字節,則應將4更改為32。

不能保證一個malloc調用在下一個(實際上是實現)填充塊之后連續分配。

sizeof(char)始終為1 完全沒有理由在您的代碼中編寫該代碼。 強制轉換malloc()的返回值也被許多人認為是不好的樣式。

如果您需要盡可能接近32位(最小開銷)並且想要非常便攜,則可能需要以下內容:

char *base_ptr = malloc((32 + CHAR_BIT - 1) / CHAR_BIT);

解決標題中的“對齊”一詞。

標准malloc不保證返回的分配對齊。 特定的實現可能會或可能不會對該領域有所幫助,並且可能會或可能不會具有某種擴展以允許您控制返回的塊的對齊方式。 但是,這些東西將無法移植。

正如其他人所說,每次分配都保證是連續的,並且至少與您的要求一樣大; 但不能保證任何一對分配的相對位置。 也沒有一種可移植的方法來發現實際分配的大小,這使得訪問超出請求大小的內存不安全且未定義(同樣,某些實現可能提供擴展來解決這些問題)。

暫無
暫無

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

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