Home >Backend Development >C++ >Does `std::array` Have the Same Size and Memory Layout as a Built-in Array?
Is the Size and Memory Layout of std::array Identical to an Array?
Despite the standard defining std::array with contiguous storage and performance comparable to a regular array, it leaves some room for ambiguity regarding its exact size and memory layout.
Standard Requirements
Section 23.3.2.1/2 of the standard states that an array is an aggregate initialized with an initializer list containing up to N elements convertible to T. This suggests that std::array must store the values themselves, excluding any auxiliary data.
Potential Variations
However, the standard does not explicitly guarantee that std::array will have the same size and memory layout as a built-in array. Theoretically, a compiler could store additional auxiliary data after the specified data or apply different padding or alignment rules.
Super-Alignment Considerations
Built-in arrays cannot support super-alignment requirements, such as data for Intel's SSE instructions. While std::array's specification might allow for super-alignment, it is not explicitly guaranteed.
Implementation-Specific Implications
Conclusion: The standard's requirements do not definitively impose that std::array must have the same size and memory layout as a built-in array. While documentation suggests that it should be equally memory efficient, it remains implementation-specific. Therefore, one cannot rely on the assumption of identical sizeof and memory layout.
The above is the detailed content of Does `std::array` Have the Same Size and Memory Layout as a Built-in Array?. For more information, please follow other related articles on the PHP Chinese website!