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 nel programma hanno una dimensione doppia. E (almeno su un'architettura ILP32 / LP64) anche le tue long
s sono due volte più grandi. Questo di solito comporta un aumento di circa il 30% nella dimensione del codice oggetto. Ciò significa che …
- il tuo codice oggetto impiegherà circa il 30% in più per caricarsi dal disco nella RAM
- il tuo codice oggetto occuperà circa il 30% di spazio in più in memoria
- hai effettivamente ridotto la larghezza di banda della memoria (per il codice oggetto) di ~ 20%
- hai effettivamente ridotto la dimensione della cache delle istruzioni del 20% circa
Ciò ha un effetto negativo non trascurabile sulle prestazioni.
Farlo ha senso solo se è possibile "riacquistare" quei costi di performance in qualche modo. Fondamentalmente, ci sono due modi per farlo: fai molti calcoli interi a 64 bit o hai bisogno di più di 4 memoria mappata GiByte. Se uno o entrambi sono veri, ha senso usare un software a 64 bit, altrimenti non lo è.
Nota: esistono alcune architetture in cui non esistono varianti corrispondenti a 32 o 64 bit. In tal caso, la domanda ovviamente non ha senso. I più noti sono IA64, che è solo a 64 bit e non ha una variante a 32 bit, e x86 / AMD64 che sono, sebbene strettamente correlati, architetture diverse , x86 essendo solo a 32 bit, AMD64 essendo solo a 64 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 si tratta di un'architettura CPU "corretta", è un modo di utilizzare l'architettura AMD64 in modo da avere un nativo Variante a 32 bit. Ciò è stato fatto proprio perché l'overhead delle prestazioni sopra menzionato stava causando problemi reali misurabili e quantificabili per gli utenti del mondo reale che eseguono codice del mondo reale nei sistemi del mondo reale.