我用VC++6.0写了个基于MFC常规的动态链接库,当声明三维数组过大时(X[2][360][1000]),调用时会出错,同样的程序段在可执行文件中没有问题。将数组改小到X[1][60][1000]时不报错,我想这可能是动态链接库存在最大内存限制,想请问一下动态链接库可容许的最大内存空间有多大?

解决方案 »

  1.   

    数组元素是char吗?我觉得你才这么点大,应该没关系的
      

  2.   

    DLL可以有自己的数据段,但没有自己的堆栈,DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;
      

  3.   

    大数组用new在堆在分配,不要在栈上,如果一定要在栈上,要更改程序栈大小设置,默认为1M
    vc6.0 工程->设置->连接->输出->保留 0x100000表示1M,自己调整大小
    如果在栈上分配,可用sizeof(X)得出你需要内存的多少
      

  4.   

    dll自身又不能运行,它运行时的空间是从进程中划分的
      

  5.   

    建议使用malloc(2*360*1000)的方式分配在堆上,然后用指针偏移(如*(p+i*k+j))这种方式来经行寻址
      

  6.   

    我用malloc方式在dll中分配的内存,大约超过四五百M时,会访问内存失败。是否还是有内存限制?