一个32位进程在64位linux上有多less虚拟内存(也就是说,在开始获取NulL指针之前,我可以分配多less内存并使用malloc() )?
我在我的32位linux上试过了,达到了大约3GB的限制。 我能在64位linux上获得更多的信息吗?
为什么我的二进制文件在windows 8上运行,而不是在windows 7上运行?
对于windows 7上的64位安装,Python PIP有MS Visual Studio 2010 Express的path问题
winAPI:CreateProcess但隐藏进程的窗口?
在C#中执行相同环境中的多个命令
如何从windows服务作为不同的用户运行进程
在标准的32位x86 smp内核中,每个进程可以使用3GB的4GB地址空间,内核使用1GB(在每个进程的地址空间中共享)。
随着4G / 4G拆分“hugemem”的32位x86内核,每个进程可以使用(几乎)整个4GB的地址空间,并且内核具有单独的4GB地址空间。 这个内核在RHEL 3和RHEL 4中被Red Hat支持,但是它们放到了RHEL 5中,因为修补程序没有被接受到主线内核中,现在大多数人仍然使用64位内核。
使用64位x86_64内核,32位进程可以使用整个4GB地址空间,除了内核管理的4GB地址空间末尾的几页(8KB)外。 内核本身使用超过4GB可访问32位代码的地址空间的一部分,所以它不会减少用户地址空间。 64位进程可以使用更多的地址空间(RHEL 6中为128TB)。
请注意,一些地址空间将被程序代码,库和堆栈空间使用,所以你将无法malloc()你的整个地址空间。 这些东西的大小因程序而异。 看看/proc/<pID>/maps来看看地址空间是如何在你的进程中使用的。 你可以malloc()将受到最大的未使用的地址范围的限制。
如上所述,32位内核的32位进程将能够分配大约3GB的内存。 在64位内核上的32位进程将能够分配大约4GB的内存。
不管 *** 作系统如何,32位进程只能访问4GB的虚拟内存。 这是由于进程只能映射32位的内存地址。 如果你做数学,你会发现32位地址只能访问最大4GB,即使你在128位 *** 作系统上运行。
在64位的linux上,一个进程的最大内存空间是2 ^ 48字节。 (理论上,更多的是可能的,但目前的芯片不允许使用2 ^ 64字节的整个虚拟地址空间。)
请参阅维基百科获取更多信息。
总结以上是内存溢出为你收集整理的内存限制在64位Linux *** 作系统上运行的32位进程全部内容,希望文章能够帮你解决内存限制在64位Linux *** 作系统上运行的32位进程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)