首頁 >後端開發 >C++ >C 標準是否保證「std::array」與內建陣列具有相同的大小和記憶體佈局?

C 標準是否保證「std::array」與內建陣列具有相同的大小和記憶體佈局?

Linda Hamilton
Linda Hamilton原創
2024-11-19 22:36:031049瀏覽

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

C 標準定義了 std::array 的大小嗎?

在 C 11 中,std::array 提供連續存儲,性能相當到常規數組。但是,尚不清楚 std::array 的大小和記憶體佈局是否與普通數組相同。

標準要求

C 標準(§23.3.2.1/2)將陣列定義為透過以下方式初始化的聚合:

作為聚合,std::array 無法使用建構函式來轉換初始值設定項清單中的資料。這意味著它主要存儲實際數據值。

潛在的特定於實現的行為

從技術上講,std::array 可以包含輔助資料或非輔助資料。 - 標準對齊,這會偏離正常數組的行為。

例如,編譯器可以在 std::array 的末尾加上一個哨兵值來偵測越界寫入嘗試。或者,std::array 可以支援超級對齊(例如,英特爾 SSE 指令),但內建陣列不支援。

預期行為

一般來說,您可以預期以下程式碼能如預期運作:

大多數編譯器(例如GNU 和英特爾)都遵循此行為。然而,值得注意的是,該標準並沒有明確保證 std::array 和普通數組具有相同的記憶體佈局。

以上是C 標準是否保證「std::array」與內建陣列具有相同的大小和記憶體佈局?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn