Heim >Backend-Entwicklung >C++ >Hat „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?
Größe von std::array im C-Standard
Die C 11-Spezifikation für std::array gewährleistet zusammenhängende Speicherung und vergleichbare Leistung reguläre Arrays. Es stellt sich jedoch die Frage, ob std::array die gleiche Größe und Speicheraufteilung wie ein Standard-Array hat.
Gemäß §23.3.2.1/2 des Standards ist ein Array ein Aggregat, das sein kann initialisiert mit der Syntax:
std::array<T, N> a = { initializer-list };
Als Aggregat muss std::array die Werte aus der Initialisierungsliste direkt speichern. Während es theoretisch möglich ist, dass ein std::array Hilfsdaten speichert oder sich in der Ausrichtung von einem regulären Array unterscheidet, sind diese Möglichkeiten höchst unwahrscheinlich.
In der Praxis behandeln die meisten Compiler std::array als einen zusammenhängenden Block von Speicher mit der gleichen Größe und dem gleichen Layout wie ein reguläres Array. Dieses Verhalten wird durch die Dokumentation von Drittanbietern unterstützt und in verschiedenen Compilern beobachtet.
Zum Beispiel funktioniert der folgende Code, der auf ein std::array als mehrdimensionalen Array-Zeiger zugreift, wie erwartet:
std::vector<std::array<int, N>> x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer)&x[0][0]; // use y like normal multidimensional array
Basierend auf diesen Beobachtungen kann man im Allgemeinen davon ausgehen, dass:
sizeof(std::array<int, N>) == sizeof(int) * N
Es ist jedoch wichtig zu beachten, dass dieses Verhalten vorliegt nicht unbedingt durch den Standard garantiert. Compiler haben eine gewisse Flexibilität bei der Implementierung von std::array, und zukünftige Revisionen des Standards könnten dieses Verhalten ändern.
Das obige ist der detaillierte Inhalt vonHat „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!