Rag*_*thy 8 c memory-management memory-fragmentation
在32位机器中,每个进程获得4GB虚拟空间.在这种情况下,人们可能会担心我们可能会因为碎片而面临麻烦.但是在64位机器的情况下,我们理论上有一个巨大的可寻址虚拟内存,那么为什么内存碎片仍然是一个问题(如果是)在64位机器上?
您尝试访问的每个虚拟地址都由操作系统映射到物理内存.物理内存以页面形式分配(例如4K大小).如果你设法在偏移量1000000*n处分配一个字节,并且从1到1000000为n做(我认为你可以用mmap做到这一点),那么操作系统将不得不用一百万页的物理内存来支持它,这是比如4G.其他物理内存将无法使用.如果您已连续分配字节,则只需要大约1M的物理内存(256页)就可以获得百万字节.
如果您出于合法原因分配4G,则可能会遇到类似的不良情况,然后取消分配部分内容,保留每个页面的分配.操作系统无法将释放的内存重新用于其他任何内容,因为没有完全免费的物理页面.所以这是一个碎片问题.
理论上,您可以想象虚拟地址1000000和2000000将映射到物理内存的同一页面,从而避免碎片.但在实践中,并且出于好的理由,虚拟内存映射是逐页完成的.您可以在此处阅读更多相关信息:http://en.wikipedia.org/wiki/Page_table.
| 归档时间: |
|
| 查看次数: |
1349 次 |
| 最近记录: |