4

我今天在处理大型数据结构时遇到了一个有趣的问题。我最初使用向量来存储超过 1000000 个整数,但后来决定我实际上并不需要向量的动态功能(无论如何,我在声明它时就保留了 1000000 个点),相反,这将是有益的,能够在数据结构中的任何位置添加值。所以我把它切换到一个数组和BAM堆栈溢出。我猜这是因为在编译时声明数组的大小将其放入堆栈并使用动态向量而不是将其放在堆上(我猜它更大?)。

那么这里的正确答案是什么?回到动态内存系统,以便将其放入堆中?增加堆栈的大小?还是我在这里的整个事情都偏离了基础......?

谢谢!

4

1 回答 1

4

我最初使用向量来存储超过 1000000 个整数

好主意。

但后来我决定我实际上并不需要向量的动态功能(无论如何,一旦宣布它,我就保留了 1000000 个点)

不是一个好主意。你确实需要它。

相反,能够在数据结构中的任何位置添加值将是有益的。

我不跟。

我猜这是因为在编译时声明数组的大小将其放入堆栈并使用动态向量而不是将其放在堆上(我猜它更大?)。

很多。默认情况下,调用堆栈的大小通常约为 1MB-2MB。您的“堆”(免费存储)仅受可用 RAM 的限制。

那么这里的正确答案是什么?回到动态内存系统,以便将其放入堆中?

是的。

[编辑:约阿希姆的权利——static是另一个可能的答案。]

增加堆栈的大小?

您可以,但即使您可以从中扩展 4MB,您也没有为其他本地数据变量留下任何回旋余地。最好使用动态内存——这是正确的做法。

还是我在这里的整个事情都偏离了基础......?

不。

于 2012-11-20T01:23:07.840 回答