2012-06-19 30 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。

相关问题