[英]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.