在 32 位机器中,每个进程获得 4GB 的虚拟空间。在这种情况下,人们可能会担心我们可能会因为碎片化而遇到麻烦。但对于 64 位机器,理论上我们拥有巨大的可寻址虚拟内存,那么为什么内存碎片在 64 位机器中仍然是一个问题(如果有的话)?
您尝试访问的每个虚拟地址都会由操作系统映射到物理内存。物理内存以页为单位分配(例如大小为 4K)。如果您设法在偏移量 1000000*n 处分配一个字节,并为 n 从 1 到 1000000 执行此操作(我认为您could使用 mmap 来做到这一点),那么操作系统将不得不用一百万来支持它pages物理内存,类似于 4G。该物理内存将不可用于其他任何用途。如果连续分配字节,则您的百万字节只需要大约 1M 物理内存(256 页)。
如果出于合法原因分配 4G,然后释放其中的一部分,保留每个已分配页面的一点,您可能会遇到类似的糟糕情况。操作系统实际上无法将释放的内存重新用于其他用途,因为没有完全空闲的物理页。所以这就是一个碎片问题。
理论上,您可以想象虚拟地址 1000000 和 2000000 将映射到物理内存的同一页,从而避免碎片。但实际上,出于充分的理由,虚拟内存映射是逐页完成的。你可以在这里读更多关于它的内容:http://en.wikipedia.org/wiki/Page_table http://en.wikipedia.org/wiki/Page_table.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)