3
我正在使用mmap()
將共享內存對象映射到進程。我的問題有兩個部分:什麼是mmap的大小限制
1)mmap()
到linux進程的大小限制是多少? (是否有這樣的限制?)
2)過程運行一段時間後,我認爲進程虛擬內存地址空間會有些碎片化。這會影響我在此過程中可以執行的最大尺寸mmap()
嗎?
使用的linux內核是2.6.27
。共享內存對象的大小約爲32MB。我試圖訪問mmap()
由於沒有足夠的虛擬地址空間而導致這種共享內存對象失敗的可能性。
您唯一應該關注的問題應該是系統內存非常小,或者沒有PAE的32位系統,其中你的應用程序佔用了大量的虛擬內存,除此之外我相信這個數字很低。如果你可以提供一些關於你的應用程序內存使用情況的更多細節,這將有助於。 –
實際上,在程序文本,數據,堆,堆棧,所有共享庫及其文本/數據/堆,內核和任何其他種類的「通常」映射之後,該限制是當前未分配的地址空間的最大範圍... – twalberg
@twalberg是的,那是真的。我想知道在虛擬內存空間的所有通常會計之後,剩餘空間的大小是多少。特別是在應用程序運行很長一段時間後它會如何變化。 CPU是32位Intel CPU。我相信它有PAE。 – user1783732