Vererbung
-
Kann mir bitte jemand erklären, warum hier 8 ausgegeben wird?
#include <iostream> class Base { char c; }; class Derived : public Base { int i; }; int main() { std::cout << sizeof(Derived); }So wie ich das verstanden habe, müsste die abgelittene Klasse doch einfach sizeof(int) + sizeof(char) = 5 Bytes groß sein. Wieso ist sie dann plötzlich 8 Bytes groß?
-
http://en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding

Long story short: Der Compiler paltziert i nicht direkt hinter c, sondern lässt 3 Byte ungenutzt, damit i auf eine Adresse fällt die ein Vielfaches von 4 ist, da der Zugriff drauf dann um ein Vielfaches schneller ist.
-
Danke. Davon war in meinem Buch leider keine Rede.
-
Incocnito schrieb:
Danke. Davon war in meinem Buch leider keine Rede.
Solange in dem Buch nicht behauptet wird, dass die Große = Große von int + Größe von char ist, ist das ja auch vollkommen richtig, bzw. sollte niemanden interessieren, weil es nur zu unportablen Bytehacks gut ist.