簡體   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