Heim > Backend-Entwicklung > C++ > Hat „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?

Hat „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?

Barbara Streisand
Freigeben: 2024-12-06 22:10:13
Original
174 Leute haben es durchsucht

Does `std::array` have the same size and memory layout as a regular 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 };
Nach dem Login kopieren

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
Nach dem Login kopieren

Basierend auf diesen Beobachtungen kann man im Allgemeinen davon ausgehen, dass:

sizeof(std::array<int, N>) == sizeof(int) * N
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage