比如,new一个G的内存,怎么才能避免它被交换到分页文件中呢?
如果,总是被交换出来,那岂不是还不如用内存映射文件了么?
是不是我只要频繁使用new出来的这块内存,它实际上就一直被保持在RAM中呢?

解决方案 »

  1.   

    1G??楼主可真够狠了,不过操作系统有它自己的调度策略,不可能避免的……
    new不行啊
      

  2.   

    VirtualAlloc可以做到;不过你的程序如此设计应该会让OS'不舒服'
      

  3.   

    从目前来说,只有在内核必须使用非分页内存,因为调用内核功能的时候有时不能再产生缺页中断,否则,只能BSOD,用户层根本不需要。LZ完成 可以说明自己的需求。看有没有必要。
      

  4.   

    1.WINDOWS是按页为单位进行交换的。即将系统认为可以交换出去的页写到交换文件中。像LZ申请这么大的内存。包含太多页了。就算你使用其中一部分,也不能保证其他部分不被交换出去。
    2.如果你的程序长期需要1G内存,你更应该提醒你的用户,准备更好的硬件配置。这是基础,没有基础。你怎么优化都没用。如果用户只有512内存,就算你成功分配了1G内存。大部分还是被交换出去了。
      

  5.   

    你确定要1G的内存? 很难想象程序要不断的使用1G的内存
    像魔兽世界那些庞大的游戏也不要求一定要1G的内存。所以,感觉楼主应该看看是否有更好的设计。或者把要求说说让高手们参考参考。
      

  6.   

    当然可以提供
    问题是:服务器是不是一直把这份内存放在RAM中呢?
      

  7.   

    其实,我还是很想知道这个问题的.....
    oracle或者其他大型程序是如何保留内存的呢?
      

  8.   

    非分页根本没1G空间给你分配,就算是通过MDL锁定也会对系统造成影响
      

  9.   

    那么,请问,数据库或者其他大型服务端程序是否会使用MDL锁定内存呢?
    多谢!
      

  10.   

    通过SetProcessWorkingSet,然后配合VirtualLock?
    不知道行不行...