内存分配方面的分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存分配方面的分页相关的知识,希望对你有一定的参考价值。

在分页方面,内存分配究竟如何工作?我理解伙伴分配器,自由列表算法等都是如何工作的,但在虚拟内存和分页方面我很困惑。例如,假设我是malloc 10个字节。可以说有10个4kb虚拟页面可用。操作系统使用其中一个页面来分配10个字节。操作系统现在会将此页面标记为“不免费”吗?我确信它不会那样做,但它如何跟踪该页面中还有(4kb - 10个字节)?

答案

Linux仅适用于页面。

malloc是一个C库函数。它的工作是允许分配任意大小的内存块。它通过使用sbrk或mmap内核的工具来获取/增大/缩小页面池。它跟踪池中的已分配和可用字节。

如果一个页面用于分配一些稍后释放的内存,则内核无法知道它不再需要,除非malloc告诉它释放它(例如通过munmap)。

当malloc从内核请求页面时,进程的虚拟地址空间中的空闲虚拟页面被标记为有效并返回。访问无效页面会触发段错误。

通常分配是懒惰的。这意味着首先没有分配真实页面(即后备存储)。进程第一次写入此虚拟页面时,将分配一个实际页面,并指向虚拟页面。

然后,这个真实页面可能根据需要在物理内存和交换空间之间来回移动。

以上是关于内存分配方面的分页的主要内容,如果未能解决你的问题,请参考以下文章

Java内存分配

深入Java核心 Java内存分配原理精讲

Java内存分配及变量存储位置实例讲解

java内存空间

java内存空间详解

深入Java核心 Java内存分配原理精讲