sizeof(...)- nesedi mi velkost roznych typov

Sekcia: Programovanie 27.01.2008 | 17:37
Avatar jv openSuSE 11  Používateľ
sizeof(char)=1 OK
sizeof(short int)=2 OK
sizeof(int)=4 OK
-------------------------------
struct a { char X;}; sizeof(a)=1 OK
struct a { short int X;}; sizeof(a)=2 OK
struct a { int X;}; sizeof(a)=4 OK
-------------------------------
struct a { char X; char Y;}; sizeof(a)=2 OK
struct a { char X; short int Y;}; sizeof(a)=4 ..... Preco???
struct a { char X; short int Y; char Z; }; sizeof(a)=6 ..... Preco???
-------------------------------
Kompilacia: gcc subor.c -o subor.o
    • Re: sizeof(...)- nesedi mi velkost roznych typov 27.01.2008 | 17:48
      Avatar jv openSuSE 11  Používateľ
      No, odpoviem si sam...
      gcc zarovnava aj jednotlive polozky struktury na adresy (alignement), napriklad na nasobok 2,4 atd. Nerobi to vzdy (vid: struct a { char X; char Y;}; sizeof(a)=2).
      Preto treba zrusit zarovnavanie pomocou direktivy: struct a {...} __attribute__ ((packed));
      Nuz, zas som o nieco mudrejsi ;-)
    • Re: sizeof(...)- nesedi mi velkost roznych typov 27.01.2008 | 18:32
      Avatar jv openSuSE 11  Používateľ
      Jaj, aby som nezabudol...
      Az teraz mi to doslo... char sa zarovnava na kazdy byte short int sa zarovnava na kazdy druhy byte int sa zarovnava na kazdy stvrty byte...
      preto je dolezite, kde sa v strukture ktora polozka nachadza...

      A ze mi to skor nenapadlo...