我正在阅读虚拟记忆,我的结论如下:
malloc(size);
我是对还是错了?请解释。 提前谢谢。
答案 0 :(得分:3)
malloc不保证返回物理上连续的内存
是
它保证返回几乎连续的内存
是
特别是当尺寸> 4KB因为4KB是页面的大小。 (在Linux系统上)。
连续内存并不意味着它也会页面对齐。 allcated内存可以从堆中的任何地址开始。因此,无论操作系统使用页面大小,它都不会影响malloc的分配性质。
答案 1 :(得分:1)
malloc只是从堆中分配内存,在虚拟内存系统中完全将内存分配给进程不同的部分(文本,数据,bss,堆,堆栈)实际上是连续的。进程的每个部分都使用mmap分配了一个虚拟内存区域。
在扩展堆的情况下,基本上分配了由brk()系统调用分配的虚拟内存区域。如果尺寸大于4kb则不受影响。 虽然linux有HUGETLB页面的概念,以避免频繁的TLB未命中,但这是Linux内部的。