我编写了一个可以处理大量数据的程序。我的 CPU 和操作系统(Ubuntu)都是 64 位的,并且我有 4GB 的 RAM。使用“top”(%Mem 字段),我看到该进程的内存消耗上升到 87% 左右,即 3.4+ GB,然后它被杀死。
然后我使用“uname -m”检查了进程可以访问多少内存,结果是“无限”。
现在,由于操作系统和 CPU 都是 64 位,并且存在交换分区,因此操作系统总共应该使用虚拟内存,即 [ >3.4GB + yGB 交换空间 ],并且只有当进程需要更多内存时,它才会使用虚拟内存。应该被杀了。
所以,我有以下问题:
- 理论上一个进程在 64 位 m/c 上可以访问多少物理内存。我的答案是2^48字节。
- 如果存在少于 2^48 字节的物理内存,那么操作系统应该使用虚拟内存,对吗?
- 如果对上述问题的回答是肯定的,那么操作系统也应该使用交换空间,为什么它甚至不使用它就杀死了进程。我认为我们不必使用某些特定的系统调用来编码我们的程序来实现这一点。
请建议。
原因不仅仅是数据大小。例如,做ulimit -a
并检查最大堆栈大小。你有杀人理由吗?设置'ulimit -c 20000'来获取核心文件,当你用gdb检查它时它会告诉你原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)