簡體   English   中英

std::array 的長度是否有大小限制?

[英]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_uniquestd::vector )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM