c++ - 在 Stack 上声明大数组

标签 c++ arrays memory stack allocation

我正在使用 Dev C++ 编写模拟程序。为此,我需要声明一个数据类型为 double 的一维数组。 .它包含 4200000元素 - 如 double n[4200000] .

编译器没有显示错误,但程序在执行时退出。我已经检查过,对于具有 5000 的数组,程序执行得很好元素。

现在,我知道不建议在堆栈上声明这么大的数组。然而,问题是模拟需要我多次调用数组中的特定元素——例如,我可能需要 n[234] 的值。或 n[46664]对于给定的计算。因此,我需要一个更容易筛选元素的数组。

有没有办法在堆栈上声明这个数组?

最佳答案

不,没有(我们会说“合理的”)方法来在堆栈上声明这个数组。但是,您可以在堆栈上声明指针,并在堆上留出一些内存。

double *n = new double[4200000];

访问其中的 n[234] 应该不会比访问您这样声明的数组的 n[234] 更快:

double n[500];

或者更好的是,你可以使用 vector

std::vector<int> someElements(4200000);
someElements[234];//Is equally fast as our n[234] from other examples, if you optimize (-O3) and the difference on small programs is negligible if you don't(+5%)

如果你用 -O3 优化,它和数组一样快,而且更安全。与

double *n = new double[4200000]; 

除非你这样做否则你会泄漏内存的解决方案:

delete[] n;

除了异常(exception)和各种情况,这是一种非常不安全的做事方式。

关于c++ - 在 Stack 上声明大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029671/

相关文章:

函数参数中的c++函数定义

python - 如何获取所有数组边?

sql - 字符串匹配在 PostgreSQL 9.5 数组中的位置

php - yy_create_buffer() 中的动态内存不足

c++ - 我如何在ios中从.m文件调用函数到.mm文件

c++ - 对象具有阻止匹配的类型限定符(未找到函数重载)

arrays - C 结构体可以包含指向其他结构体数组的指针(具有不同的长度)

c++ - 使用 malloc 分配比现有内存更多的内存

c++ - 在一个线程上删除具有数百万个字符串的大型 HashMap 会影响另一个线程的性能

c++ - C++ OpenMP 内核的简单加速