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
Muss so sein. Sonst hätten verschiedene Objekte u.U. die gleiche Adresse.
Das macht Sinn. Kann man es trotzdem mit irgendeiner Compiler-Option ausstellen? MfG Mark
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.
> 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.