La differenza tra software a 32 bit e software a 64 bit è la dimensione dei puntatori e forse la dimensione dei registri interi. Questo è tutto.
Ciò significa che tutti i puntatori del tuo programma hanno il doppio della dimensione. E (almeno su un'architettura ILP32 / LP64) anche il tuo long
s ha il doppio della dimensione. Questo in genere comporta un aumento del 30% circa delle dimensioni del codice oggetto. Ciò significa che ...
- il tuo codice oggetto impiegherà circa il 30% in più per essere caricato dal disco nella RAM
- il tuo codice oggetto occuperà il 30% di spazio in più in memoria
- hai effettivamente abbassato la larghezza di banda della tua memoria (per il codice dell'oggetto) del ~ 20%
- hai effettivamente abbassato la dimensione della cache delle istruzioni di ~ 20%
Questo ha un effetto negativo non trascurabile sulle prestazioni.
Fare questo ha senso solo se puoi "riacquistare" quei costi delle prestazioni in qualche modo. Fondamentalmente, ci sono due modi per farlo: si fa un sacco di matematica a 64 bit interi, o si ha bisogno di più di 4 memorie mappate GiByte. Se uno o entrambi sono veri, è logico utilizzare software a 64 bit, altrimenti non lo è.
Nota: ci sono alcune architetture in cui non ci sono varianti corrispondenti a 32 o 64 bit. In tal caso, la domanda ovviamente non ha senso. I più noti sono IA64, che ha solo 64 bit e non ha varianti a 32 bit, e x86 / AMD64 che sono, anche se strettamente collegate, architetture diverse , x86 a 32 bit solo, AMD64 a 64 solo bit.
In realtà, quest'ultima affermazione non è più vera al 100%. Linux ha recentemente aggiunto l'ABI x32, che consente di eseguire il codice AMD64 con puntatori a 32 bit, quindi anche se non è un'architettura CPU "corretta", è un modo di utilizzare l'architettura AMD64 in modo tale che se avesse un Variante a 32 bit. Ciò è stato fatto con precisione perché l'overhead delle prestazioni che ho menzionato sopra stava causando reali problemi misurabili e quantificabili per gli utenti del mondo reale che eseguono il codice del mondo reale nei sistemi reali.