La principale differenza tra un processore a 32 bit e uno a 64 bit è che un processore a 64 bit ha interi a 64 bit come word nativa, il che significa che può fare i conti con interi a 64 bit in maniera più veloce.

Questo per il 90% delle applicazioni è sostanzialmente irrilevante, visto che normalmente gli interi a 32 bit bastano e avanzano.

Il motivo per cui si è passati ad un'architettura a 64 bit è per questioni di spazio di indirizzi virtuale; un processore a 32 bit può indirizzare uno spazio di indirizzi di 4 GB, il che significa che ogni processo non può "vedere" più di 4 GB di dati in memoria nello stesso momento (il fatto poi che lo spazio di indirizzi di ogni programma è diviso tra una metà usato in user mode e l'altra metà per il kernel di fatto dimezza o comunque riduce lo spazio di indirizzi direttamente disponibile per le applicazioni). Tangenzialmente, questo consente anche di indirizzare più memoria fisica (RAM), cosa che comunque era possibile fare tramite PAE, ma in maniera più complicata (la questione è spiegata per bene nella mia pillola in rilievo in questa sezione).
(Incidentalmente, nel passaggio a 64 bit anche i programmi a 32 bit possono avere qualche vantaggio - nello specifico, il kernel non si mangia più metà dello spazio di indirizzi a 32 bit, per cui i programmi che sono in grado di sfruttarlo possono tenersi tutto lo spazio d'indirizzi a 32 bit per dati utente)

I vantaggi veri in termini di prestazioni di un processore x86 a 64 bit rispetto ad uno a 32 bit sta in realtà in questioni "accessorie".

Il primo grande vantaggio sta nel fatto che l'architettura x86_64 raddoppia il numero di registri general purpose; l'architettura x86 "classica" è un'architettura "register starved" (ovvero, il processore dispone di pochi registri), il che in alcuni casi costringe i compilatori ad emettere codice che continua a scrivere e leggere dallo stack (e quindi di fatto tipicamente dalla cache) invece che dai registri (molto più veloci e con meno problemi di serializzazione). Aumentare il numero e le dimensioni dei registri semplifica il lavoro ai compilatori e in genere consente di emettere codice più veloce (anche se va detto che le tecniche di register renaming già in uso riducevano in parte l'impatto del problema).

Secondariamente, su x86_64 è garantita la presenza dei set di istruzioni SSE e SSE2, per cui i compilatori possono impiegarle (al posto, ad esempio, delle istruzioni x87) senza problemi di compatibilità con vecchi processori; anche questo consente di generare codice più veloce.

Tra i contro del passaggio a 64 bit, c'è il fatto che determinati programmi possono usare più memoria, dato che raddoppiano le dimensioni dei puntatori; in casi patologici (tipicamente programmi che internamente lavorano con strutture dati piene di puntatori) il working set del processo può anche arrivare a raddoppiare in dimensioni.