在32位Linux系统上,进程最多可以访问4 GB的虚拟地址空间;然而,在保留任何这些方面,程序在不同程度上似乎保守。因此,使用malloc的程序偶尔会通过系统调用sbrk/brk来扩展其数据段。即使这些网页尚未在物理内存中声明。我不完全明白的是,为什么我们需要首先解决问题,为什么不直接给我4 GB的地址空间来避免任何sbrk调用,直到我们接触/声明这些块为止,它本质上是一个免费的操作权?虚拟内存和sbrk
5
A
回答
5
如果你记忆映射一个文件(在Linux下做一件很常见的事)会发生什么?它必须在地址空间的某个地方,所以必须有一些定义“使用”和“未使用”部分的方法。
共享内存(实际上只是映射文件而没有实际文件)是相同的。它必须去某个地方,操作系统必须确保它可以放置它而不会覆盖某些东西。
此外,由于明显的(不太明显的)效率原因,最好保持参考的局部性。如果你被允许在地址空间的任何位置写信和读取信息,你可以打赌有些人会这么做。
4
有一对夫妇的浮现在脑海中的原因:
- 你会不再得到段错误访问映射的内存
- 的Translation lookaside buffer(TLB)时将更大,可能需要更多的时间来进行设置高达
- 你不得不如果你在一个新的共享库或MMAP加载取消映射一些内存反正()的东西
相关问题
- 1. Memcached和虚拟内存
- 2. 虚拟内存
- 3. 虚拟内存?
- 4. 内联和虚拟
- 5. 程序exectuion进程和虚拟内存
- 6. 虚拟内存系统,页表和TLB
- 7. Tomcat内存和虚拟主机
- 8. 虚拟和物理内存/ OutOfMemoryException
- 9. 链接,加载和虚拟内存
- 10. 分配内存之前虚拟内存
- 11. 虚拟内存到物理内存
- 12. 物理内存与虚拟内存
- 13. 虚拟内存或物理内存
- 14. Excel虚拟内存问题
- 15. 虚拟内存处理
- 16. gdb:虚拟内存耗尽
- 17. Linux上的虚拟内存
- 18. Android支持虚拟内存
- 19. mongodb虚拟内存大小
- 20. 需要虚拟内存吗?
- 21. 什么是虚拟内存?
- 22. 访问linux虚拟内存
- 23. cc1plus:虚拟内存耗尽
- 24. 关于虚拟内存
- 25. Pytables vs虚拟内存
- 26. 虚拟内存的使用
- 27. 虚拟内存大小
- 28. Flash虚拟内存改进
- 29. 虚拟内存空间
- 30. 探索虚拟内存(ProcessWalker)
“共享内存(这其实只是一个映射文件,而无需实际的文件)是一样的。它必须去某个地方,操作系统必须确保它可以放置它,而不会覆盖某些东西。“我明白你说的(我认为),因为malloc调用mmap(匿名和私有),我相信并且可能或可能会不要调用sbrk,但是如果在程序中,init malloc已经完成了brk(4GB),它将系统调用删除到sbrk等等。但是你不能再映射额外的内存映射文件或者用不同的标志创建共享内存。我开始明白 – 2012-04-25 09:51:28
“另外,为了明显(并且不太明显)的效率原因,最好保持参考的位置。”但是如果我从1gb中取出一些内存到4gb块中并将3.9gb放入4gb块中,它可能会一旦新鲜的分配是seg故障(刚刚清零的权利),在物理记忆中关闭? – 2012-04-25 09:52:55
它可能,它可能不会,你不知道。 – Damon 2012-04-25 10:30:01