拥有大型2d数组:static int vs int

Ani*_*hag 4 c++ arrays

在解决DP相关问题时,我观察到第一个工作但第二个seg故障.什么是实际原因以及使用int的内存限制是多少?

int main(){
    static int a[3160][3160];
    return 0;
}

int main(){
    int a[3160][3160];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 5

因为你可能没有足够的堆栈内存来存储那个大数组.

第二个示例在堆栈上创建一个数组,而第一个示例创建一个数组,该数组不在堆栈上,而是在data/Bss段中的某个位置,因为您使用static限定符显式指定了存储条件.

需要注意的是C++标准没有规定stackheapdata segmentBss segment这些都是实现定义的细节.该标准仅指定使用不同存储条件声明的变量的预期行为.因此,其中的变量实际上是建立是实现定义,但有一点可以肯定的是,无论是因为没有足够的内存在该地区你的例子将创建不同的存储区域阵列和第二个崩溃.

此外,如果您在实际实现中创建如此巨大尺寸的数组,您的设计似乎存在缺陷,您可能需要考虑重新访问它.

您可能还想考虑使用std :: arraystd :: vector,而不是传统的c风格数组.