【问题标题】:How much memory does a stack take?一个堆栈占用多少内存?
【发布时间】:2014-04-06 11:12:36
【问题描述】:

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

无论如何,假设我有一个包含 10 个整数的数据集。下面的内存有什么区别(std::stack):

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

另外,一个空的 int 堆栈需要多少内存?它只是一个额外的 int 指针吗?

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

【问题讨论】:

  • 什么是堆栈?您是指 C/C++ 调用堆栈还是您心中有数据结构或类?
  • 哈珀,我正在使用 std::stack
  • 无法回答,因为它显然取决于您正在使用的std::stack 的特定实现。
  • 啊。这是可视化的 C++ 之一,但无论如何我现在明白了。抱歉,伙计们提出了愚蠢的问题!

标签: c++ stack


【解决方案1】:

最明显的答案是:这一切都取决于。其实有些话是可以说的。

所有容器都会产生适度的开销,最多大约为(可能)一对指针和一对整数。如果您真的想知道,您可以找出多少,但它会是恒定的并且非常小,具体取决于实现。

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

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

所以这一切都取决于。你只需要试试看。

【讨论】:

    【解决方案2】:

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

    (另见:std::deque memory useWhat the heque is going on with the memory overhead of std::deque?https://stackoverflow.com/a/5559774/257568;等)。

    【讨论】:

    • 答案很清楚,大小取决于实现。链接是奖励。而且我认为您的评论对讨论没有任何帮助。
    猜你喜欢
    • 2018-05-16
    • 2017-02-06
    • 2013-03-14
    • 2018-05-02
    • 2012-02-13
    • 2019-06-20
    • 2016-06-29
    • 2013-08-26
    • 2019-09-29
    相关资源
    最近更新 更多