2012-06-19 29 views
2

我有32GB內存的機器,我想模擬嘗試了一個用戶進程的16GB機中運行。一種方法是讓一個微小的用戶進程運行並阻止16GB的物理內存,然後進入休眠狀態,然後讓這個以前的用戶進程在可用系統中運行。如何強制用戶程序阻止16GB的物理RAM?

的問題是,當我寫一個程序,malloc的16GB內存,大部分的內存會從虛擬內存封鎖,只有周圍的物理內存64MB被阻止。有沒有辦法強制阻止物理內存?

+2

什麼操作系統? – RobH

+0

你需要什麼?您始終可以運行帶有16GB RAM的虛擬機,或者只需從電腦中拔出16GB。你在做什麼似乎非常愚蠢。 –

+1

[m鎖(http://linux.die.net/man/2/mlock)或[VirtualLock](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366895(V = vs.85)的.aspx)。 – sehe

回答

2

Linux有一個內核參數忽略內存超過一定尺寸:

max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or 
        equal to this physical address is ignored. 

所以,你可以使用它。或者看看mlock

+0

謝謝! mlock的工作就像一個魅力! – xyz

0

可以使用MAP_ANONYMOUSMAP_LOCKED使用mmap(第一標誌只是爲了避免需要一個文件來創建mmap,該fdoffset參數被忽略)。如果size_t是不是64位的,你需要做多個mmap要求達到16 GB。

相關問題