Depending on the ISA (Intel, regardless), the different instructions must be word aligned (which can lead to them taking up more space), and the numerical constants must correspond to the size of the processor word. The binary is filled with int constants: your loops start at zero, etc. In short, the likely cause of the extra space is int padding and word alignment of persistent data.
Depending on how it is compiled, 64-bit code may use more memory. Data structures also want to be word aligned for quick access, and the compiler can choose to place your structures. In addition, depending on the compiler, some constants may resize. (That's why you always see typdefs as uint32: guaranteed size.)
source share