char *p =(char *)malloc(667000000);用new 也一模一样。
一句可以成功得到有效值
换成670,000,000就不可以了,通过设置/heap:700000000也不行,好像和机器的虚拟内存大小及物理内存没有关系,我在两台机器上试过(256内存和512内存,都一样。分界线是667000000~670000000之间的一个值),怎么回事呀?

解决方案 »

  1.   

    600+ M?
    是大了点。就算512M内存也不够用了,检查一下虚拟内存的设置看看。不过这种极限的情况试验一下可以,真正要使用的话,建议还是使用Virtual Memory Manager.
    Heap 处理这个很定会力不从心的。
      

  2.   

    确有其事
    UINT uLength = 600000000;
    char* p = new char[uLength];
    for(int i = 1; i < 100; i++)
    *(p + uLength - i) =  i;
    delete[] p;
    在Win98SE,VC6+SP4,128M内存上说“内存不足”
      

  3.   

    操作系统拒绝该这种愚蠢的程序分配内存,用VirtualAlloc
      

  4.   

    为什么要分配这么大的空间呢?windows现在是多进程的,不可能让一个进程独自占用巨大的内存空间。还是好好考虑一下算法吧,一个算法的实现要充分考虑空间和时间的效率
      

  5.   

    600多兆,内存不够使啦。楼上的代码在我机器上就正常。配置:XP Profession, VC6 + sp5, 768M.
      

  6.   

    在128M内存上new 100M没有问题,不过硬盘狂闪。