Есть один момент, который является весьма часто заблуждением. А именно - int (он же integer, то есть просто переменная) не всегда 4 байтный, а на самом деле - переменная архитектурно зависимого типа. Дело в том что бывают случаи когда int и 1 байт, это на старых архитектурах (если верно помню, чтото типа PDP10), а также инт бывает и 8 байт. Ровно как и даже если архитектура 32битная инт не обязательно будет 32х битный, нужно читать инфу на архитектуру. По этому самая грубая ошибка объявлять переменные типом int, нужно всегда явно типизировать.
Кстати такая же путаница иногда случается и с типом double (например
TMS320) где double=float(4 байта).
C long тоже...
на х86:
sizeof(int)=4, sizeof(long)=4, sizeof(long long)=8
на х86_64:
sizeof(int)=4, sizeof(long)=8, sizeof(long long)=8