Одно из возможных отличий состоит в том, что символы могут быть выровнены на 64-битных, а не на 32-битных границах.
struct {
char a;
char b;
}
Может занимать 2 * 4 байта на 32-битной и 2 * 8 байтов на 64-битной.
редактировать - на самом деле это не так. Любой здравомыслящий компилятор будет перепаковывать структуру только с символами на границе байта. Однако, если вы добавили 'long c;' в конце концов все может случиться. Вот почему а) у вас есть sizeof () и б) вы должны быть осторожны, выполняя ручные указатели в c.