Frage

Ich frage mich, warum die folgenden zwei Typen

struct {
    double re[2];
};

und

double re[2];

haben die gleiche Größe in C? Nicht struct ein bisschen Größe Kopf hinzufügen?

War es hilfreich?

Lösung

Nein, es ist einfach nur komponiert, alle Elemente in ein übergeordnetes Element, dessen Größe nur die einzelnen Elemente Größen aufaddiert (plus etwas Padding je nach Ausrichtung Regeln, aber das ist aus dem Rahmen dieser Frage).

Andere Tipps

Nicht, wenn es ihm kann helfen - nein. C vermeidet Overhead wie die Pest. Und speziell, es vermeidet Overhead in diesem Zusammenhang.

Wenn Sie eine andere Struktur verwendet, könnte man einen Unterschied sehen:

struct space_filled
{
    char       part0;
    double     part1;
};

Wenn Ihre Maschine double erfordert auf eine 8-Byte-Grenze ausgerichtet wird (und sizeof(double) == 8, was normal ist, aber nicht durch den Standard vorgeschrieben), dann werden Sie feststellen, dass die Struktur 16 Byte belegt.

Nein, nicht die Struktur hat noch nichts hinzuzufügen. Anders als in Java oder .NET, wo Klassen (und structs) eine Reihe von anderen Aufgaben haben, in C und C ++, sind sie einfach als Container verwendet, um eine Anzahl von Datenelementen zu halten. In C ++, können sie eine V-Tabelle gespeichert werden müssen, um virtuelle Funktion zu lösen ruft falls vorhanden, aber in der Regel nicht, eine Struktur selbst hat keinen Overhead.

Die einzige Ausnahme ist folgende:

typedef struct {} empty;
assert(sizeof(empty) > 0);

Die Größe einer leeren Struktur wird nicht Null sein. Eine Struktur hat haben, etwas von Null verschiedene Größe, da jedes Objekt eine eindeutige Adresse haben muss. (Sonst würden Sie nicht in der Lage sein, eine Reihe dieser Strukturen erstellen)

Nein. Struct fügt keine Größe oder haben einen zusätzlichen Overhead in der kompilierten C.

Es ist eine Schicht von Syntax, die durch den Compiler zusätzliche Arbeit erfordert, hat aber keinen Overhead zur Laufzeit.

C ist ein äußerst „nackten“ Sprache, was bedeutet, dass es nichts ist, es sei denn erforderlich. Also fragen Sie sich: „Was ist eine Overhead-Struktur VERLANGEN?“, Und Sie werden keine finden.

Nein, es tut.

Das ist eine der guten Seiten von Strukturen (warum sie in der alten Schule TCP / IP-Programmierung so hilfreich waren).

Es ist ein guter Weg, um den Speicher / Puffer-Layout darzustellen.

nicht der Strukturtyp in C-Layout nur sequentiell die Mitglieder im Speicher

sometmes finden Sie unter: http://en.wikipedia.org/wiki/Sizeof

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top