2
我有一個應用程序,使用MEM_RESERVE標誌在Windows上使用VirtualAllocEx保留一個連續的內存塊。這保留了一個虛擬內存塊,但不支持物理頁面或頁面文件塊。因此,訪問分配的內存將導致分段錯誤 - 但其他分配不會與此虛擬內存塊相交。如何在Linux中保留虛擬內存?
如何使用mmap對Linux進行相同操作?我確實注意到this question中的答案,但是如果我不觸摸分配的頁面,是否真的能保證說1 GB的物理內存不會分配給我的進程?我不想要任何顛簸問題。
+1我認爲這是要走的路 – slezica 2013-03-07 01:47:14
這是一個非常有趣的技術。通過使用'mmap(2)'+'PROT_NONE',你在Windows上基本上具有'VirtualAlloc()'+'MEM_RESERVE'的相同效果。我更關心'MAP_NORESERVE'標誌:一旦你需要頁面,你可以用'mprotect(2)'設置'PROT_READ | PROT_WRITE'(這就像調用VirtualAlloc()'+ MEM_COMMIT '),一旦你指定了對'mmap(2)'的調用,你就不能重置標誌'MAP_NORESERVE',所以你的內存永遠都會被設置爲「no reserve」,即使是「提交」。你會如何解決這個怪癖? – 2015-07-28 11:10:19