In C++ ist das Problem einfach.C++ RTTI Vererbung bewirkt, dass die Klassengröße zunimmt
Ich habe 2 Klassen eine das andere im Rahmen ihrer Umsetzung enthält.
struct A
{
void do_something()
{
};
};
struct B
{
A obj_A;
void hello_world()
{
};
};
Das Problem ist jetzt, dass Struktur B ein Byte größer ist, wenn ein Teil von B ist, wenn ein I sizeof (B) und Objekt vom Typ B. A tun, ist 100% nur einzige nicht-virtuelle gehen schließen Mitglieder (keine virtuelle Tabelle erforderlich) und es ist keine Typid-Prüfung erforderlich. Gibt es eine Möglichkeit (wie eine Compiler-Direktive), das nicht benötigte Byte vollständig aus B zu entfernen, aber trotzdem die Mitgliedsfunktion von A durch B zu erreichen?
Ich kann nur davon ausgehen, das zusätzliche Byte ist ein Compiler char * zu A den Namen "A" hinzugefügt, aber alle anderen Ideen können hilfreich sein.
Wenn Ihr Compiler g ++, versucht Deaktivieren von RTTI durch Kompilieren mit 'g ++ -fno-rtti'. Wenn das Problem weiterhin besteht, geben Sie bitte eine vollständige C++ - Quelldatei an, die das Problem aufweist, und ich werde sehen, welche Größe mein Compiler ergibt. – pts
FWIW: Ich habe versucht, den Code mit g ++ (Version 4.2.4) mit und ohne obj_A Mitglied kompilieren, mit und ohne RTTI aktiviert ist, und jedesmal, wenn ich bekam sizeof (B) == 1. So scheint es einige Informationen fehlen von deiner Frage. –