std::array 的大小和記憶體佈局與陣列相同嗎?
儘管標準定義std::array 具有連續性儲存和效能與常規陣列相當,但它的確切大小和記憶體留下了一些模糊的空間
標準要求
標準第23.3.2.1/2 節規定,陣列是一個聚合體,它使用包含最多 N個可轉換為的元素的初始值設定項清單進行初始化T. 這表示std::array 必須儲存值本身,不包括任何輔助data.
潛在的變化
但是,標準沒有明確保證std::array 將具有與內建陣列相同的大小和記憶體佈局。理論上,編譯器可以在指定數據之後儲存額外的輔助數據,或應用不同的填充或對齊規則。
超級對齊注意事項
內建陣列不支援超級-對齊要求,例如英特爾 SSE 指令的資料。雖然 std::array 的規格可能允許超級對齊,但沒有明確保證。
特定於實現的影響
結論:該標準的要求並未明確強加std::array 必須具有與內建陣列相同的大小和記憶體佈局。雖然文件表明它應該具有相同的記憶體效率,但它仍然是特定於實現的。因此,不能依賴相同 sizeof 和記憶體佈局的假設。
以上是`std::array` 與內建陣列有相同的大小和記憶體佈局嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!