我正在尝试mmap
一些大文件但失败了:我无法mmap任何大于2.7 GB的文件。
通过ulimit -a
,它说我的虚拟内存是无限的。然后我做了cat /proc/meminfo
它说我的系统有3GB Memfree和2GB Swapfree。
我假设我可以mmap一个高达5GB的文件。我尝试了在互联网上学到的所有内容,包括使用MAP_NORESERVE
标记并将overcommit_memory
设置为1
。它仍然是相同的,Cannot allocate memory
。什么可能出错?
我使用64位cpu和32位linux系统。如果您需要更多信息,请告诉我。我真的很感激任何建议或提示。
答案 0 :(得分:10)
您需要使用64位操作系统,因为32位操作系统没有足够的地址空间 编辑:虽然你的系统有一些物理内存可用,但32位进程只能达到4GB,内核驱动程序的内核保留大约1-2GB ......所以32位应用程序的用户空间通常有2GB。
答案 1 :(得分:2)
您的应用程序根本没有足够的地址空间(可用内存地址)来映射大文件。
在Linux下,在32位内核上运行的32位进程通常具有大约3GB的可用地址空间,而在64位内核上运行的32位进程具有4GB的可用地址空间。如果您需要更多,则需要将应用程序编译为64位进程。这将为您提供至少128TB的地址空间。