簡體   English   中英

這是關於malloc()和calloc()的正確嗎?

[英]Is this is correct about malloc() and calloc()?

我已經研究了所有可能的方法,但我很難消化這樣一個事實,即malloc即malloc(sizeof(10))和calloc即calloc(2,sizeof(5))分配相同的連續內存,忽略其他事實calloc初始化為零,並且工作速度比malloc慢。 所以這就是我的想法。

我認為在32位系統上,如果我們調用malloc並說malloc(sizeof(10))那么malloc將進入堆並分配12個字節的內存,因為對於32位系統,內存包是按組排列的4個字節,所以分配10個字節需要3個塊,在最后一個塊中填充2個字節。

類似地,如果我們調用calloc並說calloc(2,sizeof(5))那么它將分配2個塊,每個塊大小為8個字節,總共16個字節,因為由於相同的原因,內存在4個字節的包中並且分配5個字節使用兩個4字節的塊,並且在一個塊中將提供3個字節的填充。

所以這就是我對malloc和calloc的看法。 我可能是對或錯但請告訴我。

calloc為每個大小字節的nmemb元素數組分配“內存”( Linux手冊頁 ),但我們知道C中的數組不能在數組元素之間填充 ,它們必須在內存中連續。 另一方面, malloc分配“ 大小字節”,因此malloc(10)calloc(2,5)都將為您提供這十個字節。

現在,幕后發生的是另一個問題,C庫可能會決定分配12,16或42個字節。 但你不能也不能指望這一點。 如果你要求10個字節,假設你有10個字節。

malloc(sizeof(10))是不同的,它占用int的內存大小(因為10是一個int ),並分配那么多。

使用這兩種方法時所獲得的至少是您請求的內存量。 它可以更多。 一個原因可能是你提到的那個。 另一個原因可能是你得到一個更大的塊,以防萬一你想稍后改變它。

沒有辦法確切地說你有多少。 只有你至少保證你所要求的,如果你沒有,你將獲得一個空指針。

不過請注意,用得到我的意思是,你得到你問什么,你就別想指望不止於此。 這將是未定義的行為。

暫無
暫無

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

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