[英]Is there a size limit on the length of a std::array?
如果我嘗試在使用 g++ 7.3.1 編譯的 Centos 7.6 系統上實例化大型二維 std::array,則會出現分段錯誤:
int main()
{
const unsigned NUM_BUFFERS = 200;
const unsigned BUFFER_SIZE_BYTES = 1024 * 1024;
std::array<std::array<unsigned char, BUFFER_SIZE_BYTES>, NUM_BUFFERS> buffer;
}
給出:
$ ./main
Segmentation fault (core dumped)
std::array 的長度是否有大小限制?
我已經在堆棧上聲明了這個數組,但大概存儲在空閑存儲上。 什么在這里失敗?
你得到一個堆棧溢出。
std::array
就地分配,堆棧空間通常非常有限(例如在 Windows 上為 1MB,在 Linux 上為 4-8 MB)。
使用std::vector
代替,它在堆上分配。
std::array
的長度有大小限制嗎?
對象大小的限制是由實現定義的。 該標准指定了所需的最小限制如下,但大多數實現可能支持更大的對象(最多可用內存):
[限制]
對象的大小 ([intro.object]) [262 144]。
我已經在堆棧上聲明了這個數組,但大概存儲在免費存儲上
你猜錯了。 std::array
不會從免費存儲中分配任何內容,但將數組作為成員。
什么在這里失敗?
堆棧溢出。
執行堆棧的大小取決於實現。 在桌面系統上,堆棧的默認大小是一到幾兆字節。 每個函數調用的所有自動變量都必須適合這個空間。
為避免此限制,請動態分配數組(例如使用std::make_unique
或std::vector
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.