[英]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
异常,虽然有些系统在这方面有所破坏,需要特殊配置才能工作。
存储在容器中的对象数量有两个限制:
集装箱容量
让我们在一个非常小的容器上考虑这个问题,该容器使用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.