Heim > Backend-Entwicklung > C++ > Hauptteil

Garantiert der C-Standard die Größe und das Speicherlayout von „std::array'?

Barbara Streisand
Freigeben: 2024-11-24 10:49:12
Original
444 Leute haben es durchsucht

Does the C   Standard Guarantee the Size and Memory Layout of `std::array`?

Wird die Größe von std::array durch den Standard erzwungen?

In C 11 ist std::array garantiert zusammenhängend Speicher und eine Leistung, die ein normales Array übertrifft oder diesem gleichkommt. Es bleibt jedoch die Frage: Definiert der Standard explizit die Größe und das Speicherlayout von std::array?

Untersuchung der Anforderungen des Standards

Der Standard definiert std:: Array als Aggregat, das mit der folgenden Syntax initialisiert werden kann:

std::array<T, N> a = { initializer-list };
Nach dem Login kopieren

Als Aggregat kann std::array nicht verwendet werden Konstruktoren zum Konvertieren von Daten aus der Initialisierungsliste. Dies bedeutet, dass das Array in erster Linie die Werte selbst speichert.

Mögliche Abweichungen vom erwarteten Verhalten

Technisch gesehen verbietet der Standard bestimmte potenzielle Abweichungen nicht:

  • Zusätzlicher Datenspeicher: std::array könnte über den angegebenen hinaus zusätzlichen Speicher reservieren Werte, die eine Fehlererkennung ermöglichen, wenn Daten über die Grenzen des Arrays hinaus geschrieben werden.
  • Ausrichtungsunterschiede: Compiler wenden möglicherweise eine unterschiedliche Ausrichtung oder Auffüllung auf std::arrays an, insbesondere im Vergleich zu integrierten Arrays zur Unterstützung erweiterter Ausrichtungsanforderungen.

Compiler Variationen

Trotz der Mehrdeutigkeit des Standards deutet die praktische Verwendung in großen Compilern wie GNU und Intel darauf hin, dass die Größe und das Speicherlayout von std::array denen regulärer Arrays entsprechen.

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// Safe multidimensional array-like usage
Nach dem Login kopieren

Das stimmt Es ist wichtig zu beachten, dass dieser Code zwar wie erwartet funktioniert, es jedoch keine Garantie dafür gibt, dass alle Implementierungen diesem Muster folgen. Daher ist es nicht ratsam, sich in geschäftskritischem Code auf dieses Verhalten zu verlassen.

Das obige ist der detaillierte Inhalt vonGarantiert der C-Standard die Größe und das Speicherlayout von „std::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