使用标准C ++库堆栈类时,堆栈的最大大小是多少?

时间:2014-11-05 23:02:02

标签: c++ stack

使用标准C ++库stack类时,堆栈的最大大小是多少? 或者你可以定义它的最大尺寸?我一直在寻找,但还没有找到答案。

4 个答案:

答案 0 :(得分:4)

堆栈是容器适配器,因此其限制取决于底层容器的限制。默认情况下,这是deque

  

默认情况下,如果没有为特定堆栈类实例化指定容器类,则使用标准容器双端队列。

由于系统或库实现限制,可以使用max_size函数找到:

// deque::max_size
#include <iostream>
#include <deque>

int main ()
{
  unsigned int i;
  std::deque<int> mydeque;

  std::cout << mydeque.max_size(); // 1073741823

  return 0;
}

Example

作为示例值,它在链接的程序上返回1073741823。

你还应该记住:

  

由于已知的系统或库实施限制,这是容器可以达到的最大可能大小,但是容器无法保证能够达到该大小:它仍然无法在任何容器中分配存储达到该尺寸之前的点。

即。这些是理论设计限制,您不应该在正常使用场景中接近这些限制。其他容器也有类似的考虑因素。

答案 1 :(得分:2)

本身没有一个。如果底层容器用完,它将尝试从堆中获取更多内存(最终是操作系统)。如果失败,您通常应该获得std::bad_alloc例外,尽管有些系统在这方面存在缺陷,需要特殊配置才能工作。

答案 2 :(得分:1)

对容器中存储的对象数量有两个限制:

  1. 容量变量可以容纳的最大值。
  2. 程序可用的内存。
  3. 容器容量
    让我们在一个非常小的容器上考虑这个问题,该容器使用uint8_t变量来计算计数器中元素的数量。

    uint8_t变量可以容纳256个变量,因此无论系统可用的内存量如何,容器都将限制为255个项目。

    内存限制
    每个平台都有有限的内存。

    在许多平台中,操作系统负责为您的程序分配内存。例如,您的平台可能正在运行使用大量内存的应用程序,因此您的程序没有剩余很多内容。

    如果容器使用64位无符号整数进行容量和索引,则容器的容量可能仍会受到分配给程序的内存的限制。如果您的程序分配了1024字节的内存,那么容器的容量不会超过1024 / object_size。因此,如果我的对象是256字节,我可以存储在容器中的最大数量是1024/256或4个对象。

    <强>摘要
    容器容量受其索引或容量变量使用的范围,容器中对象的大小以及分配给程序的内存量的限制。所有容器都会有一些开销会降低容器的容量(例如,基于链表的容器需要为链接字段添加内存)。有时,分配给程序的内存可能是程序加载后剩余的数量。 通常,容器容量不用担心,除非程序在内存受限的系统上运行,例如大多数没有硬盘的嵌入式平台。

答案 3 :(得分:0)

  

&#34;使用标准C ++库堆栈类时,堆栈的最大大小是多少?&#34;

我担心该实施/操作系统依赖。从理论上讲,它应该针对std::stack::size_type能够持有什么。