簡體   English   中英

malloc 不保證返回物理上連續的內存

[英]malloc does not guarantee returning physically contiguous memory

我正在閱讀有關虛擬內存的內容,我的結論如下:

malloc(size);
  1. malloc 不保證返回物理上連續的內存。 它保證返回幾乎連續的內存。 特別是當 size > 4KB 時更是如此,因為 4KB 是頁面的大小。 (在 Linux 系統上)。

我是對還是錯? 請解釋。

malloc 不保證返回物理上連續的內存

是的

它保證返回幾乎連續的內存

是的

尤其是當 size > 4KB 時更是如此,因為 4KB 是頁面的大小。 (在 Linux 系統上)。

連續內存並不意味着它也將是頁面對齊的。 分配的內存可以從堆中的任何地址開始。 因此,無論操作系統使用頁面大小,它都不會影響 malloc 的分配性質。

malloc 只是從堆分配內存,在虛擬內存系統中完成分配內存給進程的不同部分(文本、數據、bss、堆、堆棧)實際上是連續的。 進程的每個部分都使用 mmap 分配了一個虛擬內存區域。

在堆擴展的情況下,它基本上被分配了一個由 brk() 系統調用分配的虛擬內存區域。 如果大小大於 4kb,則不受影響。 雖然 linux 有 HUGETLB 頁面的概念來避免頻繁的 TLB 未命中,但這是 Linux 內部的。

暫無
暫無

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

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