Speicherbedarf bei leeren Klassen

OP #735767
Lesenswert?

Hallo,

weis jemand, wieso beim avr-gcc Objekte selbst dann RAM verbrauchen, 
wenn diese überhapt keine nichtstatische Variablen enthalten? Es wird 
immer 1 Byte pro Objekt gebraucht. Was auch seltsam ist: wenn ich in der 
Klasse einfach eine zusätzliche char-Variable definiere, sind es immer 
noch 1 byte/Objekt.

MfG Mark
#735876
Lesenswert?

Mark Prediger wrote:
> Das macht Sinn. Kann man es trotzdem mit irgendeiner Compiler-Option
> ausstellen?

Nein. Wie Andreas schon sagte: Das muss so sein.

Wenn du beispielsweise ein Array machst, so wird gefordert, dass
alle Array Elemente unterschiedliche Adressen im Speicher haben.
Hätte eine leere Klasse eine Größe von 0 Bytes, so hätte
auch ein Array aus derartigen Elementen eine Größe von 0
Bytes und folgerichtig würden alle Array Elemente dann auch
dieselbe Adresse im Speicher haben. Das darf aber nicht sein
und daher kann ein Objekt einer Klasse auch keine Größe 0
haben.

Das ist aber auch nicht wirklich ein Problem. Eine absolut
leere Klasse hat man praktisch nur in den wenigsten Fällen.
Meistens handelt es sich um irgendwelche Basisklassen einer
Vererbungshierarchie. Von diesen Klassen selbst werden aber
normalerweise keine Objekte gebildet. Und bei abgeleiteten
Klassen berücksichtigt dann der Compiler dieses 1 Byte
und nimmt es wieder raus, sodass Objekte von abgeleiteten Klassen
wieder die erwartete Größe besitzen.
Gast #735889
Lesenswert?

> Hätte eine leere Klasse eine Größe von 0 Bytes, so hätte
> auch ein Array aus derartigen Elementen eine Größe von 0
> Bytes und folgerichtig würden alle Array Elemente dann auch
> dieselbe Adresse im Speicher haben.

Man könnte auch sagen, sie haben gar keine Adresse, denn um eine Adresse 
zu haben, müßten sie erst einmal Speicher belegen.

> Meistens handelt es sich um irgendwelche Basisklassen einer
> Vererbungshierarchie.

Ein anderer Fall sind Funktionsobjekte, die an Templates übergeben 
werden. Aber da ist es normalerweise auch kein Problem und wird meistens 
ganz wegoptimiert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren