以编程方式在C++中查找最大静态数组大小

Sir*_*Guy 8 c++ memory

我很好奇是否可以确定数组在C++中可以拥有的最大大小.

    #include <iostream>

    using namespace std;

    #define MAX 2000000

    int main()
    {
      long array[MAX];
      cout << "Message" << endl;
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

这个编译得很好,但是一旦我运行它就会出现段错误(即使实际上没有引用数组).我知道这也是数组大小,因为如果我将其更改为1000000它运行得很好.

那么,是否存在某种定义或某种方式#define MAX MAX_ALLOWED_ARRAY_SIZE_FOR_MY_MACHINE_DEFINED_SOMEWHERE_FOR_ME

我实际上并不需要这个,这个问题是出于好奇的缘故.

Gre*_*ill 10

没有办法静态地确定这个,因为实际限制取决于你的线程给出了多少堆栈空间.你可以创建一个新线程,给它10兆字节的堆栈,你就可以分配一个相应更大的本地数组.

您可以在堆栈上分配的数量还取决于到目前为止已经使用了多少.

  • 声明局部变量时,整个数组的空间是从堆栈空间分配的(这与Java等其他语言不同).当您在函数外部声明全局内容时,链接器会设置内存地址,以便在程序开始运行之前存在空间.堆栈的大小有限(在现代桌面操作系统上通常为1兆字节,但可以有很大差异),而静态可用空间是机器的整个应用程序地址空间(32位系统上大约2 GB). (3认同)