dziwny rozmiar struktury

Odpowiedz Nowy wątek
2011-07-09 22:11
zdziwiony
0

Czesc
Szybkie pytanie - dlaczego ta struktura:

struct ST {
    unsigned char t1; //1 bajt
    unsigned long t2; //4 b
    unsigned char t3; //1 b
};

po skompilowaniu programu zajmuje 12 bajtów? Chociaż wydaje sie ze powinna 6.. kompilator bawi sie w dziwne optymalizacje?
Jak moge uzyskac prawdziwy rozmiar?

Cały kod, do szybkiej kompilacji:

#include <stdio.h>
 
struct ST {
    unsigned char t1;
    unsigned long t2;
    unsigned char t3;
};
 
int main() {
    printf("%d\n", sizeof(ST)); //wyswietla 12
    return 0;
}

Uzywam VS10, ale z tego co sprawdzilem pod gcc na linuxie jest to samo. Kompletnie tego nie rozumiem :|

Pozostało 580 znaków

2011-07-09 22:35
0

rozmiar każdego elementu jest wyrównywany do rozmiaru największego elementu w strukturze http://msdn.microsoft.com/en-us/library/71kf49f1(v=vs.80).aspx czyli w tym wypadku do 4B


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-07-09 22:41
zdziwiony
0

Aha. a da się tego jakoś uniknąć? Czy nie mam na to wpływu?

Pozostało 580 znaków

2011-07-10 00:02
O_o
0

Problem tetrisa, jak klocki nie chcą wejść w danej pozycji to trzeba przestawić :)

struct ST2 {
        unsigned long t2;
        unsigned char t1;
        unsigned char t3;
};
//albo
struct ST3 {
        unsigned char t1;
        unsigned char t3;
        unsigned long t2;
};

Wyrównanie dyktuje największe pole ( long=4B )
Stąd:
[ 1 ][ 2 ][ 3 ][ 4 ][ 1 ][ 2 ][ 3 ][ 4 ][ 1 ][ 2 ][ 3 ][ 4 ]
char ----I am bored :(---- loooooooooooooooooonngg char ----I am bored :(----
loooooooooooooooooonggg char char --Take me!-- I am freeeeee!!! Yay |^^
char char --Take me!-- loooooooooooooooooooong I am freeeeee!!! Yay |^^

( Nie jestem pewien czy jest [char char ------- ] czy [ char ---- char ---- ], chyba to pierwsze ale różnicy nie ma w tym przypadku )

Pozostało 580 znaków

2011-07-10 00:18
było
0

http://4programmers.net/Forum/C_i_C++/151298-C++_Problem_z_wielkościąstruktury-_align

Pozostało 580 znaków

2011-07-10 00:36
zdziwiony
0

@O_o
Akurat przestawienie w tym wypadku mnie nie zadowala, bo kolejność jest istotna dla prawidłowego działania programu.
Ale dzieki za 'wizualizacje' ;)

Problem rozwiazany, dzięki odpowiedzi w linku wyżej.

Pozostało 580 znaków

2011-07-10 01:14
O_o
0

Ewww, się naprodukowałem na darmo ;)

Pozostało 580 znaków

2011-07-10 10:13
0

Jak moge uzyskac prawdziwy rozmiar?
A po co? Nie należy tego ruszać chyba że ma się istotny powód i wie się co się robi.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0