Ich habe eine Struktur X, die von Struktur Basis erbt. Doch meine aktuelle Setup aufgrund Ausrichtung, Größe X ist 24B:Vererbt die Vererbung über die Abwicklung die strenge Aliasing-Regel?
typedef struct {
double_t a;
int8_t b;
} Base;
typedef struct {
Base base;
int8_t c;
} X;
Um den Speicher zu sparen, würde Ich mag die Basis-Struktur entspannen, so habe ich Struktur Y, die enthält Felder aus Base (in der gleichen Reihenfolge, immer am Anfang der Struktur), so dass die Größe der Struktur ist 16B:
typedef struct {
double_t base_a;
int8_t base_b;
int8_t c;
} Y;
Dann die einen Zeiger erwartet werde ich Instanz von struct Y in einem Verfahren verwenden, zu Basisstruktur:
void print_base(Base* b)
{
printf("%f %d\n", b->a, b->b);
}
// ...
Y data;
print_base((Base*)&data);
Verletzt der obige Code die strenge Aliasing-Regel und führt zu undefiniertem Verhalten?
Recht, fixierte den Beispielcode –
Warum Sie nicht einfach 'Base Base erklären;' in 'Y' und rufen Sie die Funktion mit 'print_base (& data.base); '? Es verbraucht den gleichen Speicher wie die Mitglieder der Struktur in der anderen Struktur. – mch
@mch es nicht. Größe der Struktur X, die Ihren Ansatz verwendet, dauert 24 Bytes, während Struktur Y nur 16 –