sizeof (type) == sizeof object?

13/02/2013 - 10:34 von Georg Bauhaus | Report spam
Hi,

kann ich davon ausgehen, dass die im Betreff genannte
Gleichheit stets gilt?
Und schließt dann die Gleichheit aus, dass ein compiler
ein Objekt packt, wenn im zu übersetzenden Programm dieses
Objekt (von einem "normalen" Strukturtyp) mit Attributen oder
Pragmata versehen vereinbart wurde?

#include <stdio.h>

struct S {
short int x;
long int y;
};

struct S0 {
short int x;
long int y;
} __attribute__((aligned(2),packed));

int main()
{
struct S obj;
struct S0 obj0;
struct S objX __attribute__((aligned(2),packed));

fprintf(stdout, "struct S: type size %lu, object size %lu",
sizeof (struct S),
sizeof obj);
fprintf(stdout, "struct S0: type size %lu, object0 size %lu",
sizeof (struct S0),
sizeof obj0);
fprintf(stdout, "struct S: type size %lu, objectX size %lu",
sizeof (struct S),
sizeof objX);

return 0;
}
 

Lesen sie die antworten

#1 Claus Reibenstein
13/02/2013 - 15:52 | Warnen spam
Georg Bauhaus schrieb:

kann ich davon ausgehen, dass die im Betreff genannte
Gleichheit stets gilt?



Wenn object vom Typ type ist, ja.

Und schließt dann die Gleichheit aus, dass ein compiler
ein Objekt packt, wenn im zu übersetzenden Programm dieses
Objekt (von einem "normalen" Strukturtyp) mit Attributen oder
Pragmata versehen vereinbart wurde?



Packen von Strukturen sowie Attribute sind nicht Bestandteil der Sprache
C. Das sind Erweiterungen, über deren Auswirkungen der C-Standard
folglich auch keine Aussage trifft. Hier müsstest Du Dich mit der
Dokumentation Deines Compilers auseinandersetzen.

Gruß
Claus

Ähnliche fragen