我正在使用mmap()
将共享内存对象映射到进程。我的问题有两个部分:
mmap()
1) linux进程的大小限制是多少?(有这个限制吗?)
2)进程运行一段时间后,我认为进程虚拟内存地址空间会以某种方式碎片化。这会影响我mmap()
在这个过程中可以做的最大尺寸吗?
使用的 linux 内核是2.6.27
. 共享内存对象的大小约为 32MB。我正在尝试访问mmap()
由于没有足够的虚拟地址空间而导致此类共享内存对象失败的可能性。
大小没有限制,mmap
但取决于给定进程使用的现有地址空间。但强烈建议您不要mmap
使用大的连续虚拟地址空间。另一个建议是在mmap
访问特定物理地址(或设备地址)并在完成后取消映射时使用“即时”
/proc/sys/vm/overcommit_memory
控制 Linux 上的最大值
我已经详细解释了这一点:malloc 可以分配的最大内存
基本上, 的值1
允许任意虚拟分配,而0
和2
具有更复杂的限制计算。