随便搞了个函数里面定义: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嘛.理解不深刻求指点
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嘛.理解不深刻求指点
那是因为 1024*1024*1024*2.0 后面那个2.0是double类型,乘上去后就成为double类型了,所以提示你double 转为无符号整形可能会数据损失,不信你试试 1024*1024*1024*2估计就不会提示
用户态可用的虚拟内存为2GB,但是除掉必要的dll等所占用的内存空间,可用的内存空间还要再小一点
error C2148: total size of array must not exceed 0x7fffffff bytes
不指定数据类型缺省应该是整型,1024*1024*1024*2高位溢出正好是负数,减一就会正确(估计的,没试)。*2.0是double的数据类型转换到无符号int,应该就是正确的了。再大unsigned int 也溢出了。
error C2148: total size of array must not exceed 0x7fffffff bytes既然最大都不能超过2G(0x7fffffff)了,怎么定义成4G反变成警告了呢?