使用标准C ++库stack
类时,堆栈的最大大小是多少?
或者你可以定义它的最大尺寸?我一直在寻找,但还没有找到答案。
答案 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;
}
作为示例值,它在链接的程序上返回1073741823。
你还应该记住:
由于已知的系统或库实施限制,这是容器可以达到的最大可能大小,但是容器无法保证能够达到该大小:它仍然无法在任何容器中分配存储达到该尺寸之前的点。
即。这些是理论设计限制,您不应该在正常使用场景中接近这些限制。其他容器也有类似的考虑因素。
答案 1 :(得分:2)
本身没有一个。如果底层容器用完,它将尝试从堆中获取更多内存(最终是操作系统)。如果失败,您通常应该获得std::bad_alloc
例外,尽管有些系统在这方面存在缺陷,需要特殊配置才能工作。
答案 2 :(得分:1)
对容器中存储的对象数量有两个限制:
容器容量
让我们在一个非常小的容器上考虑这个问题,该容器使用uint8_t变量来计算计数器中元素的数量。
uint8_t
变量可以容纳256个变量,因此无论系统可用的内存量如何,容器都将限制为255个项目。
内存限制
每个平台都有有限的内存。
在许多平台中,操作系统负责为您的程序分配内存。例如,您的平台可能正在运行使用大量内存的应用程序,因此您的程序没有剩余很多内容。
如果容器使用64位无符号整数进行容量和索引,则容器的容量可能仍会受到分配给程序的内存的限制。如果您的程序分配了1024字节的内存,那么容器的容量不会超过1024 / object_size。因此,如果我的对象是256字节,我可以存储在容器中的最大数量是1024/256或4个对象。
<强>摘要强>
容器容量受其索引或容量变量使用的范围,容器中对象的大小以及分配给程序的内存量的限制。所有容器都会有一些开销会降低容器的容量(例如,基于链表的容器需要为链接字段添加内存)。有时,分配给程序的内存可能是程序加载后剩余的数量。 通常,容器容量不用担心,除非程序在内存受限的系统上运行,例如大多数没有硬盘的嵌入式平台。
答案 3 :(得分:0)
&#34;使用标准C ++库堆栈类时,堆栈的最大大小是多少?&#34;
我担心该实施/操作系统依赖。从理论上讲,它应该针对std::stack::size_type
能够持有什么。