gpt4 book ai didi

c++ - 拥有大型二维数组 : static int vs int

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:47 25 4
gpt4 key购买 nike

在解决 DP 相关问题时,我观察到第一个有效但第二个段错误。实际原因是什么?仅使用 int 的内存限制是多少?

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

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

最佳答案

因为您可能没有足够的堆栈内存来存储这个大数组。

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

注意c++标准没有规定stack或者heap或者data segment或者Bss segment这些都是实现定义的细节。该标准仅指定使用不同存储标准声明的变量的预期行为。所以,在哪里变量实际上创建是实现定义的,但可以肯定的是,您的两个示例都将在不同的内存区域中创建数组,而第二个崩溃是因为该区域内存不足。

此外,如果您在实际实现中创建了一个如此巨大的维度数组,那么您的设计似乎有缺陷,您可能需要考虑重新审视它。

您可能还想考虑使用 std::array std::vector ,而不是传统的 C 风格数组。

关于c++ - 拥有大型二维数组 : static int vs int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com