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
Barbara StreisandOriginal
2024-12-06 22:10:13172Durchsuche

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 };

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!

Stellungnahme:
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