[英]Avoid paging when Allocating big blocks of memory in C?
我正在使用Barnes-Hut算法在C中編寫N體仿真,這需要使用大塊內存。 我想要速度和效率。 有沒有辦法保證這些內存塊將保留在RAM中而不會被分頁到硬盤驅動器?
編輯:我想分配多達2GB,但可以想象我可能最終運行一些具有更多內存的模擬。
編輯:解決方案應該支持Windows7(可能是Windows8出來的時候?)和Ubuntu
有一些操作系統原語可以做你想要的:Unix上的mlock
(Ubuntu只是一個例子¹)和Windows上的VirtualLock
。 (忽略關於VirtualLock的確切語義的評論中的狡猾;它們與您的用例無關。)
Unix的基本要求root
調用進程的權限(一些系統允許鎖定下來的少量內存沒有特權,但你要遠不止於此)。 Windows原語似乎不需要特殊權限。
¹“Linux不是UNIX”反對意見,並在偏見中被忽略。
對於Linux:mlock(2)將完成這項工作。
https://www.kernel.org/doc/man-pages/online/pages/man2/mlock.2.html
但請注意,用戶可嵌入內存的數量通常限制在標准系統ulimit -l
。
Windows版本是VirtualLock。 我不知道是否存在限制以及如何查詢。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366895%28v=vs.85%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.