Open TooTallNate opened 8 years ago
http://www.catb.org/esr/structure-packing/packtest.c
Copied here for posterity:
#include <stdio.h> #include <stdbool.h> struct foo1 { char *p; char c; long x; }; struct foo2 { char c; /* 1 byte */ char pad[7]; /* 7 bytes */ char *p; /* 8 bytes */ long x; /* 8 bytes */ }; struct foo3 { char *p; /* 8 bytes */ char c; /* 1 byte */ }; struct foo4 { short s; /* 2 bytes */ char c; /* 1 byte */ }; struct foo5 { char c; struct foo5_inner { char *p; short x; } inner; }; struct foo6 { short s; char c; int flip:1; int nybble:4; int septet:7; }; struct foo7 { int bigfield:31; int littlefield:1; }; struct foo8 { int bigfield1:31; int littlefield1:1; int bigfield2:31; int littlefield2:1; }; struct foo9 { int bigfield1:31; int bigfield2:31; int littlefield1:1; int littlefield2:1; }; struct foo10 { char c; struct foo10 *p; short x; }; struct foo11 { struct foo11 *p; short x; char c; }; struct foo12 { struct foo12_inner { char *p; short x; } inner; char c; }; main(int argc, char *argv) { printf("sizeof(char *) = %zu\n", sizeof(char *)); printf("sizeof(long) = %zu\n", sizeof(long)); printf("sizeof(int) = %zu\n", sizeof(int)); printf("sizeof(short) = %zu\n", sizeof(short)); printf("sizeof(char) = %zu\n", sizeof(char)); printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(double) = %zu\n", sizeof(double)); printf("sizeof(struct foo1) = %zu\n", sizeof(struct foo1)); printf("sizeof(struct foo2) = %zu\n", sizeof(struct foo2)); printf("sizeof(struct foo3) = %zu\n", sizeof(struct foo3)); printf("sizeof(struct foo4) = %zu\n", sizeof(struct foo4)); printf("sizeof(struct foo5) = %zu\n", sizeof(struct foo5)); printf("sizeof(struct foo6) = %zu\n", sizeof(struct foo6)); printf("sizeof(struct foo7) = %zu\n", sizeof(struct foo7)); printf("sizeof(struct foo8) = %zu\n", sizeof(struct foo8)); printf("sizeof(struct foo9) = %zu\n", sizeof(struct foo9)); printf("sizeof(struct foo10) = %zu\n", sizeof(struct foo10)); printf("sizeof(struct foo11) = %zu\n", sizeof(struct foo11)); printf("sizeof(struct foo12) = %zu\n", sizeof(struct foo12)); }
http://www.catb.org/esr/structure-packing/packtest.c
Copied here for posterity: