堆栈需要多少内存?

时间:2014-04-06 11:12:36

标签: c++ stack

我正在编写一种排序算法,我只能使用堆栈。通过增加堆栈数量,我可以用更少的操作进行排序。

无论如何,我说有一个10个整数的数据集。以下内容(使用std::stack)会有什么不同:

  • 大小为2的堆栈数组(每个堆栈5个整数)
  • 大小为10的数组(每个堆栈1个整数)
  • 一个大小为20的数组(10个堆栈中每个1个整数,10个堆栈为空)

另外,一堆空的int占用了多少内存?它只是一个额外的int指针吗?

请将此问题视为学术问题。我知道有更好的方法来解决这个问题,但我只能使用堆栈。

2 个答案:

答案 0 :(得分:1)

std :: stack的大小取决于std :: stack和底层容器的特定实现(默认情况下是std :: deque)。

(另请参阅:std::deque memory use; What the heque is going on with the memory overhead of std::deque?; https://stackoverflow.com/a/5559774/257568;等等。

答案 1 :(得分:1)

最明显的答案是:一切都取决于。实际上,有些事情可以说。

所有容器都会产生适度的开销,最多可能是(可能)几个指针和几个整数。你可以知道你真的想知道多少,但它会是恒定的,而且很小,取决于实现。

C ++标准可以帮助您将需求放在容器的存储部分上。因为迭代器(或多或少)等效于指针,所以堆栈元素放置在连续的内存位置,其对齐方式与相同项的数组相同。你可以预测这部分。

它再次让你失望的是,“松弛”空间的数量没有限制。容器可能包含5个元素,并且有足够的空间容纳500.这将再次取决于实现。

所以这完全取决于。你只需要尝试并看看。