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

时间:2015-09-28 22:14:50

标签: memory-management malloc

我正在阅读虚拟记忆,我的结论如下:

malloc(size);
  1. malloc不保证返回物理上连续的内存。它保证返回几乎连续的内存。特别是当尺寸> 4KB因为4KB是页面的大小。 (在Linux系统上)。
  2. 我是对还是错了?请解释。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

  

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

  

它保证返回几乎连续的内存

  

特别是当尺寸> 4KB因为4KB是页面的大小。   (在Linux系统上)。

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

答案 1 :(得分:1)

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

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