簡體   English   中英

在C中分配大塊內存時避免分頁?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM