c++ - 巨大的数组导致堆栈溢出

标签 c++ arrays stack-overflow

我将图像存储在内存中,因此需要 30mb 以上的空间来存储所有内容(2048*2048,导出为 .bmp 时甚至更多)因此我需要增加堆栈大小。 (或者我是这样读的。)我读到的帖子说更改“堆栈保留大小”和“堆栈提交大小”,但我不想在不知道的情况下更改这样的设置。

我正在处理一个 2048^2 的二维数组(36mb 字节,因为它是结构类型,在结构中有 3 个字符)并且在保存它时它有一个 38000000 字节的一维数组大小来临时将所有内容存储在内存中.

有人可以告诉我如何将堆栈大小增加到这个数量吗?

最佳答案

不要使用堆栈分配的数组。这就是您在以下代码中得到的结果:

void func()
{
 int some_big_array[LOTS_OF_ELEMENTS];
}

相反,将其分配在堆上。现代 C++ 的做法是使用 std::vector :

void func()
{
 std::vector<int> some_big_vector(LOTS_OF_ELEMENTS);
}

在一般情况下,30mb 是堆的少量内存。

关于c++ - 巨大的数组导致堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29442659/

相关文章:

arrays - 在 Scala 中创建归零数组的更快方法

c - gdb:程序退出,代码为 030000000375

linux - 利用导致程序在 GDB 中以不同的值退出?

主函数执行时的 C++ 堆栈溢出异常

c++ - 重载 << 运算符以在模板类中打印矩阵的元素

c++ - 无法从 socket_.async_receive_from 接收数据

javascript - 如何在网格上为 HTML5 Canvas 创建随机行?

python - numpy 数组赋值问题

c++ - 在 Boost 的多索引容器中获取非常量迭代器

c++ - operator= 和 C++ 中未继承的函数?