【问题标题】:Limit to size of array type, while there's not yet an instance限制数组类型的大小,虽然还没有实例
【发布时间】: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


【解决方案1】:

这似乎是 MSVC 的限制。我尝试使用 32 位 (x86) 和 64 位 (x64) 编译器编译您的代码并得到相同的结果(使用编译器版本 19.13.26132、MSVC 2017 测试)。

【讨论】:

  • Clang 也拒绝编译它。
  • 允许编译器限制它支持的对象的大小。请参阅[implimits] 2.17“对象的大小 ([intro.object]) [262 144]。”
猜你喜欢
  • 2011-11-23
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多