Heim >Backend-Entwicklung >C++ >Garantiert der C-Standard die gleiche Größe und das gleiche Speicherlayout für „std::array' wie für integrierte Arrays?

Garantiert der C-Standard die gleiche Größe und das gleiche Speicherlayout für „std::array' wie für integrierte Arrays?

Linda Hamilton
Linda HamiltonOriginal
2024-11-19 22:36:03996Durchsuche

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

Definiert der C-Standard die Größe von std::array?

In C 11 bietet std::array zusammenhängenden Speicher mit vergleichbarer Leistung zu regulären Arrays. Es ist jedoch unklar, ob die Größe und das Speicherlayout von std::array denen normaler Arrays entsprechen.

Standardanforderungen

Der C-Standard (§23.3.2.1/2) definiert ein Array als Aggregat, initialisiert über:

array<T, N> a = { initializer-list };

Als Aggregat kann std::array nicht verwendet werden Konstruktoren zum Konvertieren von Daten in der Initialisierungsliste. Dies bedeutet, dass es in erster Linie die tatsächlichen Datenwerte speichert.

Potenzielles implementiertes spezifisches Verhalten

Technisch gesehen ist es für ein std::array möglich, Hilfsdaten einzuschließen oder nicht -Standardausrichtung, die vom Verhalten eines normalen Arrays abweichen würde.

Zum Beispiel könnte ein Compiler eine hinzufügen Sentinel-Wert am Ende eines std::array, um Schreibversuche außerhalb der Grenzen zu erkennen. Alternativ könnte Super-Alignment (z. B. Intel SSE-Anweisungen) von einem std::array unterstützt werden, jedoch nicht von einem integrierten Array.

Erwartetes Verhalten

Im Allgemeinen können Sie davon ausgehen, dass sich der folgende Code wie beabsichtigt verhält:

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &amp;x[0][0];
// Use y as a multidimensional array

Die meisten Compiler (z. B. GNU und Intel) folgen diesem Verhalten. Es ist jedoch wichtig zu beachten, dass der Standard nicht explizit ein identisches Speicherlayout für std::array und normale Arrays garantiert.

Das obige ist der detaillierte Inhalt vonGarantiert der C-Standard die gleiche Größe und das gleiche Speicherlayout für „std::array' wie für integrierte Arrays?. 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