leo*_*idp 13 linux 64-bit memory-management
32位进程在64位Linux上有多少虚拟内存(即malloc()在开始获取NULL指针之前我可以分配和使用多少内存)?
我在32位Linux上尝试过,达到了约3 GB的限制.我能在64位Linux上获得更多?
mar*_*k4o 26
在标准的32位x86 smp内核中,每个进程可以使用3GB的4GB地址空间,内核使用1GB(在每个进程的地址空间中共享).
随着4G/4G拆分"hugemem"32位x86内核,每个进程可以使用(几乎)整个4GB的地址空间,并且内核具有单独的4GB地址空间.Red Hat在RHEL 3和4中支持这个内核,但他们在RHEL 5中删除了它,因为补丁没有被主线内核接受,现在大多数人都使用64位内核.
使用64位x86_64内核,32位进程可以使用整个4GB地址空间,除了由内核管理的4GB地址空间末尾的几页(8KB).内核本身使用的地址空间的一部分超出了32位代码可访问的4GB,因此它不会减少用户地址空间.64位进程可以使用更多的地址空间(RHEL 6中为128TB).
请注意,程序代码,库和堆栈空间将使用某些地址空间,因此您将无法使用malloc()整个地址空间.这些东西的大小因程序而异.看看/proc/<pid>/maps你的过程中如何使用地址空间; 您可以malloc()使用的最大未使用地址范围限制您的金额.
无论操作系统如何,32 位进程都只能访问 4GB 虚拟内存。这是因为该进程只能映射 32 位内存地址。如果您计算一下,您会发现即使您在 128 位操作系统上运行,32 位地址最多也只能访问 4GB。
| 归档时间: | 
 | 
| 查看次数: | 18924 次 | 
| 最近记录: |