Różnica między oprogramowaniem 32-bitowym a oprogramowaniem 64-bitowym polega na wielkości wskaźników, a być może na wielkości rejestrów liczb całkowitych. Otóż to.
Oznacza to, że wszystkie wskaźniki w twoim programie są dwa razy większe. I (przynajmniej w architekturze ILP32 / LP64) twoje long
są również dwa razy większe. Zwykle osiąga to około 30% wzrost rozmiaru kodu obiektu. To znaczy że …
- Twój kod obiektu zajmie ~ 30% dłużej, aby załadować z dysku do pamięci RAM
- twój kod obiektowy zajmie ~ 30% więcej miejsca w pamięci
- skutecznie zmniejszyłeś przepustowość pamięci (dla kodu obiektowego) o ~ 20%
- skutecznie zmniejszyłeś rozmiar pamięci podręcznej instrukcji o ~ 20%
Ma to istotny wpływ na wydajność.
Takie postępowanie ma sens tylko wtedy, gdy można „odkupić” te koszty wydajności. Zasadniczo istnieją dwa sposoby, aby to zrobić: wykonujesz wiele 64-bitowych operacji na liczbach całkowitych lub potrzebujesz więcej niż 4 zmapowanej pamięci GiByte. Jeśli jedno lub oba z nich są prawdziwe, warto zastosować oprogramowanie 64-bitowe, w przeciwnym razie nie.
Uwaga: istnieje kilka architektur, w których nie ma odpowiednich wariantów 32- lub 64-bitowych. W takim przypadku pytanie oczywiście nie ma sensu. Najbardziej znane to IA64, który jest tylko 64-bitowy i nie ma wariantu 32-bitowego, oraz x86 / AMD64, które są, choć ściśle powiązane, różne architektury, x86 jest tylko 32-bitowy, a AMD64 jest tylko 64-bitowy.
W rzeczywistości to ostatnie stwierdzenie nie jest już w 100% prawdziwe. Linux ostatnio dodał x32 ABI, który pozwala na uruchamianie kodu AMD64 z 32-bitowymi wskaźnikami, więc nawet jeśli nie jest to „właściwa” architektura procesora, jest to sposób użycia architektury AMD64 w taki sposób, jakby miał natywny Wariant 32-bitowy. Zrobiono to właśnie dlatego napowietrznej wydajność wspomniałem powyżej powodując realne mierzalne, policzalne problemy dla użytkowników pracujących w świecie rzeczywistym świecie rzeczywistym kodu w systemach rzeczywistych.