繁体   English   中英

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

[英]What is the maximum size of a stack when using the standard C++ library stack class?

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

堆栈是容器适配器,因此其限制取决于底层容器的限制。 默认情况下,这是一个双端队列

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

由于系统或库实现限制,可以使用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;
}

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

你还应该记住:

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

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

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

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

  1. 容量变量可以容纳的最大值。
  2. 内存可用于您的程序。

集装箱容量
让我们在一个非常小的容器上考虑这个问题,该容器使用uint8_t变量来计算计数器中元素的数量。

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

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

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

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

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

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

我担心这依赖于实现/操作系统。 从理论上讲,它应该针对什么是std::stack::size_type能够容纳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM