003
27.06.2005, 16:01 Uhr
virtual
Sexiest Bit alive (Operator)
|
Also erstmal hat pablo recht: struct/class macht nur Unterschied hinsichtlich des Default protection levels.
Was den Aufwand angeht: Anders als in Java hast Du hier ja schon mal ein völlig anderes Klassen konzept. zB gibt es in Java nicht wirklich die Unterscheidung zwischen virtuellen und nicht virtuellen Funktionen, in C++ schon. Und dann gibt es in C++ aj auch noch die Mehrfachvererbung. Also:
Generell ist es so, daß eine Klasse/Struktur größer oder gleich der Summe der größe ihrer Komponenten ist. zB folgende Struktur:
Code: |
struct demo { char a; char b; char c; };
|
Die Größe dieser Struktur ( mit "sizeof(demo)" bestimmbar) ist garantiert >3, obwohl die einzelnen Felder zusammen ja nur 3 Byte ausmachen (char ist in C 1 Byte groß. Immer.) Wenn ich also im folgenden von dem platzbedarf der Felder rede, dann stets von der "aligned size", also dem Bedarf, den die Struktur/Klasse ohne Methoden haben würde.
Statische Felder benötigen keinen Speicher pro instanz, sondern nur einmalig, weil die ja auch nur einmal im System angelegt werden
Bei Klassen ohne virtuelle Methoden ist der Platzbedarf einer Klasse mit methoden so groß wie die Aligned size. Allerdings sollte man berücksichtigen, daß Klassen ohne virtuelle Methoden auch keinen virtuellen Destruktor haben dürfen und damit nicht ableitbar sind (ist nicht schlimm, weil in C++ weniger stark abgeleitet wird als in Java, dafür gibt es ja hier ein ziemlich geiles Templatekonzept, was bedeutend flexibler als das von Java ist).
Bei einer Klasse mit mindestens einer virtuellen methode (implizit damit auch allen einfach angeleiteten Klassen) ann man meist von einem zusätzlichen bedarf von sizeof(void*) Bytes (also meist 4 oder 8 Bytes) ausgehen.
Bei mehrfachvererbung steigt der Platzbedarf ziemlich Platformabh. und in abh. der Art der vererbung (virtuelle Vererbung oder nicht). Pi mal Daumen rechne halt 4-8 zusätzliche Byte pro direkter Basisklasse. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |