What are the key differences between x86-64 and IA-32?
x86-64 widens IA-32 to 64 bits: 64-bit registers, double the general-purpose registers (8 → 16), a huge address space, and a new 16-byte data type — but operations otherwise stay the same.
x86-64 is deliberately an extension, not a replacement, so most of IA-32 carries straight over. What changes:
| Feature | IA-32 (x86) | x86-64 |
|---|---|---|
| Register width | 32-bit | 64-bit |
| General-purpose registers | 8 (EAX–EDI) | 16 (RAX–R15) |
| Address space | 4 GB | 64-bit (48-bit used in practice) |
| Largest data type | 8 bytes | 16 bytes (__int128) |
| Pointer size | 4 bytes | 8 bytes |
| PC register | eip |
rip |
The biggest practical wins are the extra eight registers (R8–R15), which cut down how often code must spill values to memory, and the 64-bit pointers that unlock more address space.
Gotcha: despite the move to 64 bits, the default operand size in 64-bit mode is still 32-bit — 64-bit operations need a REX prefix (or a q suffix in assembly). This is why writing to %eax is so common even in 64-bit code.
Go deeper:
x86-64 (Wikipedia) — register widening and the jump from 8 to 16 GP registers vs IA-32.