本帖最后由 Formular1 于 2010-07-19 15:00:28 编辑

解决方案 »

  1.   

    自己机器上使用,自己机器上装了4G内存。双核Cori
      

  2.   

    //以下例子使用100M内存
    HANDLE hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
    void * p =MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);//指针 p 指向 1G内存的起点,内存不足才虚拟到硬盘
    //处理..........................UnmapViewOfFile(pd );
    CloseHandle(hMap);
      

  3.   

    UnmapViewOfFile(pd );  pd是指什么呢?
      

  4.   

    他的 pd 应该是 p。
    HANDLE hMap=CreateFileMapping(NULL,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
    // ...
    UnmapViewOfFile(p );
    用这个方法应该可以,LZ可以试试
      

  5.   

    你如果要利用额外的物理内存在x86下应该用AWE
      

  6.   

    xp下最多可以申请到1G内存,如果超过你需要暗转64位的操作系统。我使用的是windows server 2003 64bit中文版,一次分配过2G以上内存。
      

  7.   

    我可以只申请800-900M内存,但希望只驻留在内存中,不要交换到磁盘上的page,其实最希望的是自己可以控制,何时驻留在内存中,何时交换到磁盘上,AWE在XP下不能用吧?
      

  8.   


    实现可能性不大,windows下如果你分配的内存长时间不用,就会被放到虚拟内存中。物理内存提供给需要在使用的程序用。换过来说,如果你的程序一直被使用,那windows就不会用虚拟内存来替换你分配的物理内存。
      

  9.   

    要控制分配内存的位置,可以参考《c++编程思想》13.5.5用这种语法:
    classname * pclass=new (ploc) classname(100000);但不知道,是否会交换到硬盘。
      

  10.   

    试试cache寄存器变量,把XP的虚拟内存设置成最小。不过估计会出问题。