Linux-在任何时候,交换空间都限制着当前运行着进程能够分配的虚拟页面的总数。这句话怎么理解?
如果swap分区时2G,那么运行3个线程,每个线程都Malloc(1G),程序就无法执行吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果swap分区时2G,那么运行3个线程,每个线程都Malloc(1G),程序就无法执行吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
参考 @linux内存分配
我是这样理解的:对于操作系统的页面管理,对用户提供的是虚拟内存,不到必须分配的时候是不会真正分配内存给用户进程的,即使你malloc 1G的空间,实际上没有分配到一页的内存,只不过在本进程的进程地址空间划出去了1G的大小,只有当写入数据的时候才会真正的分配,那么如果当前系统中的内存不够用的时候怎么办呢?操作系统不可能丢弃正在被使用的物理内存页,这时候就是用换页的方式将这个物理页的内存保存在swap分区中,然后在该页所属进程的进程地址空间中进行标识换出到哪个地方了,这样在必要的时候就可以换回来了,但是换回来之后虚拟地址(对于程序来说地址)没变,但是物理地址可能发生了改变。
所以我觉得swap分区的大小是会限制分配内存的大小,但是不像LZ说的那样,我可以总结如下:一个计算机可用物理内存的大小等于swap分区的大小和可用的物理内存的大小之和,对于一个进程而言它的可用内存大小还要受到虚拟地址的宽度的限制,例如32位的机器上只能有4G的虚拟地址空间。
我是这么理解的,如有错误,望指正...