随便搞了个函数里面定义:TCHAR* p = new TCHAR[1024*1024*1024*2];或:TCHAR* p = new TCHAR[1024*1024*1024*3];就会报这个错误
error C2148: total size of array must not exceed 0x7fffffff bytes而当   TCHAR* p = new TCHAR[1024*1024*1024*2.0];时会报个warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data感觉这个应该是编译器浅尝辙止的原因吧.在:TCHAR* p = new TCHAR[1024*1024*1024*4];及更大.
就只报个WARNING     warning C4307: '*' : integral constant overflow不解.为啥4G就报个WARNING,不还该是上面那ERROR嘛.理解不深刻求指点

解决方案 »

  1.   

    不解.为啥4G就报个WARNING,不还该是上面那ERROR嘛.
    那是因为 1024*1024*1024*2.0 后面那个2.0是double类型,乘上去后就成为double类型了,所以提示你double 转为无符号整形可能会数据损失,不信你试试 1024*1024*1024*2估计就不会提示
      

  2.   

    32bit下,如果没有打开大内存支持,
    用户态可用的虚拟内存为2GB,但是除掉必要的dll等所占用的内存空间,可用的内存空间还要再小一点
      

  3.   

    随便搞了个函数里面定义:TCHAR* p = new TCHAR[1024*1024*1024*2];或:TCHAR* p = new TCHAR[1024*1024*1024*3];就会报这个错误
    error C2148: total size of array must not exceed 0x7fffffff bytes
      

  4.   

    溢出,同意3楼。
    不指定数据类型缺省应该是整型,1024*1024*1024*2高位溢出正好是负数,减一就会正确(估计的,没试)。*2.0是double的数据类型转换到无符号int,应该就是正确的了。再大unsigned int 也溢出了。
      

  5.   

    我也觉得4G的时候报这个错误比较合理:
    error C2148: total size of array must not exceed 0x7fffffff bytes既然最大都不能超过2G(0x7fffffff)了,怎么定义成4G反变成警告了呢?