How to find the size of a struct?


struct a
    char *c;
    char b;

What is sizeof(a)?

Best Solution

#include <stdio.h>

typedef struct { char* c; char b; } a;

int main()
    printf("sizeof(a) == %d", sizeof(a));

I get "sizeof(a) == 8", on a 32-bit machine. The total size of the structure will depend on the packing: In my case, the default packing is 4, so 'c' takes 4 bytes, 'b' takes one byte, leaving 3 padding bytes to bring it to the next multiple of 4: 8. If you want to alter this packing, most compilers have a way to alter it, for example, on MSVC:

#pragma pack(1)
typedef struct { char* c; char b; } a;

gives sizeof(a) == 5. If you do this, be careful to reset the packing before any library headers!