Jaki powinien być rozmiar struktury na 32-bitowej maszynie?

0

#include <stdio.h>
#include <stdint.h>

//typedef struct 
typedef struct __attribute__((packed, aligned(4)))
{
    int a;
    char b;
    char c;
    int d;
}structure;

int main()
{
    structure st;
    
    printf("%d\n", sizeof(st));

    return 0;
}

JAki powinien być rozmiar struktury st oraz rozmiar struktury z atrybutem "packed" na 32 bitowej maszynie.? Z tego co jest napisane w poradniku powinno być 16 bajtów bez atrybutu i 12 z atrybutem.

Próbowałem kompilować u siebie na 32 bitowej maszynie i za każdym razem jest 12 bajtów? Pytanie dlaczego?

0

Skąd to 16? 12 jest wielokrotnością 4, więc wszystko się zgadza.

0

aligned 4 oznacza wyrównanie adresu do podzielnego przez 4. I tak:

  • Int a rezerwuje 4 bajty
  • char b i c oba się zmieszczą w kolejnym int, więc znów 4 bajty.Co więcej, dopiszesz 2 kolejne chary, albo shorta, i nadal rozmiar struktury się nie powiększy bo nadal są 2 bajty w zapasie potrzebnym do wyrównania adresu do 4.
  • int d potrzebuje następnych 4 bajtów.
    Razem 12
0

Z tego co jest napisane w poradniku powinno być 16 bajtów bez atrybutu i 12 z atrybutem.

A co to za poradnik?

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