Visual C ++中的数组大小

时间:2014-10-12 09:46:45

标签: c++ visual-c++

如果我键入以下内容,请使用Visual Studio 2012:

char bytes[ 2*1024*1024*1024 ]; 

我得到错误:“矩阵大小必须大于零”。如果我动态地声明大小,即:

,也会出现同样的情况
char* bytes = new char[ 2*1024*1024*1024 ];

如果我删除第一个“2”,一切都很好。似乎我可以从堆栈或堆请求的内存量有一个硬限制,这个限制为1 GB。但是,鉴于size_t在最坏的情况下是4个字节(几乎可以肯定是8个字节),索引中没有任何问题无法解决数组的所有空间。问题是堆栈和堆的限制是否默认为1MB? (http://msdn.microsoft.com/en-us/library/f90ybzkh(v=vs.110).aspx)。如果是这种情况,那为什么我可以分配1 GB?

1 个答案:

答案 0 :(得分:4)

您需要注意不要溢出32位int表达式 - 2*1024*1024*10242^31,比INT_MAX大1。尝试:

char bytes[ 2ULL*1024*1024*1024 ];

请注意,编译错误与堆栈或堆大小无关。是否可以实际分配这么多的内存是一个单独的问题。