【发布时间】:2019-06-09 20:17:14
【问题描述】:
我有以下最小测试程序:
struct Test {
double contents [1000000000];
};
int main () {
return 0;
}
它拒绝编译,即使编译器不知道我是在堆栈上还是在堆上静态实例化 Test。 为什么编译器会抱怨? 堆上的对象是否也限制为 2GB?
编译错误报告:test.cpp(2): error C2148: total size of array must not超过 0x7fffffff bytes
平台:Windows 10 64 位,16GB RAM
编译器:Microsoft (R) C/C++ 优化编译器版本 19.16.27027.1 for x64 版权所有 (C) Microsoft Corporation。保留所有权利。
【问题讨论】:
-
你编译的是 32 位还是 64 位?
-
@Yksisarvinen:我使用 cl -help 来确定是否有开关,但没有列出。我没有 Visual Studio,只有命令行编译器。由于我是 64 位的,所以我假设是 64 位编译。
-
如果使用共享内存,请使用共享内存分配器分配它,只需使用
double*即可,无需数组。共享内存将为您提供原始内存。 -
"堆上的对象是否也限制为 2GB?"不,但如果内存中有碎片,您可能会遇到分配问题
标签: c++ arrays windows visual-c++ size