我正在使用 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/