malloc 不保证返回物理上连续的内存

malloc does not guarantee returning physically contiguous memory

我正在阅读有关虚拟内存的内容,我的结论如下:

malloc(size);
  1. malloc 不保证 return 物理上连续的内存。它保证 return 几乎连续的内存。当 size > 4KB 时尤其如此,因为 4KB 是页面的大小。 (在 Linux 系统上)。

我是对还是错?请解释。

malloc does not guarantee returning physically contiguous memory

It guarantees returning virtually contiguous memory

Especially it is true when size > 4KB because 4KB is a size of page. ( On Linux systems).

作为连续内存并不意味着它也将是页面对齐的。分配的内存可以从堆中的任何地址开始。因此,无论 OS 使用页面大小,它都不会影响 malloc 的分配性质。

malloc 只是从堆中分配内存,在虚拟内存系统中,完全将内存分配给进程不同的部分(文本、数据、bss、堆、堆栈)实际上是连续的。进程的每个部分都使用 mmap 分配了一个虚拟内存区域。

在扩展堆的情况下,它基本上分配了一个由 brk() 系统调用分配的虚拟内存区域。如果大小大于 4kb,则不受影响。 虽然 linux 有 HUGETLB 页面的概念以避免频繁的 TLB 未命中,但这是 Linux 的内部概念。