gpt4 book ai didi

c++ - 堆栈溢出大数组但不是同样大的 vector ?

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

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

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

谢谢!

最佳答案

I initially was using a vector to store upwards of 1000000 ints

好主意。

but later decided I didn't actually need the dynamic functionality of the vector (I was reserving 1000000 spots as soon as it was declared anyway)

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

and it would be beneficial to, instead, be able to add values any place in the data structure.

我不听。

I'm guessing this is because declaring the size of the array at compile time puts it in the stack and making use of a dynamic vector instead placed it on the heap (which I'm guessing is larger?).

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

So what's the right answer here? Move back to a dynamic memory system just so it gets put on the heap?

是的。

[编辑:Joachim 是对的——static 是另一个可能的答案。]

Increase the size of the stack?

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

Or am I way off base on the whole thing here...?

没有。

关于c++ - 堆栈溢出大数组但不是同样大的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465227/

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