Struct bidrag til tekststørrelse

stemmer
6

Jeg lurer på hvorfor følgende to typer

struct {
    double re[2];
};

og

double re[2];

har samme størrelse i C? Ikke struct legge litt størrelse overhead?

Publisert på 19/06/2009 klokken 23:35
kilden bruker
På andre språk...                            


7 svar

stemmer
23

Nei, det bare bare komponerer alle elementene til en høyere-nivå element hvis størrelse er bare de enkelte elementenes størrelser summeres (pluss noen polstring, avhengig av justeringsregler, men det er utenfor omfanget av denne spørsmålet).

Svarte 19/06/2009 kl. 23:37
kilden bruker

stemmer
12

Ikke hvis det kan hjelpe det - nei. C unngår overhead som pesten. Og spesielt, unngår det overhead i denne sammenheng.

Hvis du brukte en annen struktur, kan du se en forskjell:

struct space_filled
{
    char       part0;
    double     part1;
};

Hvis maskinen trenger doubleå bli justert på en 8-byte grense (og sizeof(double) == 8som er normalt, men ikke mandat av standard), så vil du finne at strukturen opptar 16 bytes.

Svarte 19/06/2009 kl. 23:37
kilden bruker

stemmer
5

Nope, ikke struct ikke å legge til noe. I motsetning til i Java eller .NET, hvor klasser (og structs) har en haug med andre oppgaver, i C og C ++, de er rett og slett containere som brukes til å holde en rekke data medlemmer. I C ++, kan de ha til å lagre en vtable å løse virtuell funksjonskall hvis det eksisterer, men generelt, nei, en struct seg selv har ingen overhead.

Det eneste unntaket er dette:

typedef struct {} empty;
assert(sizeof(empty) > 0);

Størrelsen av en tom struct vil ikke være null. En struct må ha noen ikke-null størrelse siden hvert objekt må ha en unik adresse. (Ellers ville du ikke være i stand til å skape en rekke av disse structs)

Svarte 19/06/2009 kl. 23:38
kilden bruker

stemmer
3

Nei. Struct legger ikke noen størrelse, eller ha en hvilken som helst overhead i den kompilerte C.

Det er et lag av syntaks som krever ytterligere arbeid av kompilatoren, men har ingen indirekte under kjøring.

C er en ekstremt "naken" språk, noe som betyr at ingenting er det mindre nødvendig. Så spør deg selv: "Hva overhead gjør en struct KREVER?", Og du vil ikke finne noen.

Svarte 19/06/2009 kl. 23:38
kilden bruker

stemmer
2

Nei den ikke.

Det er en av de gode poengene i structs (hvorfor de var så nyttig i gamle skolen TCP / IP-programmering).

Det er en god måte å representere minne / buffer layout.

Svarte 19/06/2009 kl. 23:38
kilden bruker

stemmer
0

sometmes, se: http://en.wikipedia.org/wiki/Sizeof

Svarte 19/06/2009 kl. 23:45
kilden bruker

stemmer
0

ingen struct type i C bare sekvensielt oppsett medlemmene i minnet

Svarte 19/06/2009 kl. 23:38
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more