Різниця між 32-бітним і 64-бітним програмним забезпеченням - це розмір покажчиків, а може бути і розмір цілочисельних регістрів. Це воно.
Це означає, що всі вказівники у вашій програмі вдвічі перевищують. І (принаймні, в архітектурі ILP32 / LP64) ваші long
s також вдвічі більше. Зазвичай це дозволяє збільшити розмір об'єктного коду приблизно на 30%. Це означає що …
- ваш об'єктний код займе ~ 30% більше, щоб завантажити з диска в оперативну пам’ять
- ваш об'єктний код займе ~ 30% більше місця в пам'яті
- ви ефективно знизили пропускну здатність пам'яті (для об'єктного коду) на ~ 20%
- ви ефективно зменшили розмір кешу інструкцій на ~ 20%
Це негативно впливає на продуктивність.
Робити це має сенс лише в тому випадку, якщо ви зможете якось «викупити» ці продуктивність. В основному це можна зробити двома способами: ви робите багато 64-бітової цілочисельної математики, або вам потрібно більше 4 карт пам'яті GiByte. Якщо одне або те й інше вірно, має сенс використовувати 64-бітове програмне забезпечення, інакше це не так.
Примітка. Є деякі архітектури, де немає відповідних 32 або 64 бітних варіантів. У цьому випадку питання, очевидно, не має сенсу. Найвідомішими є IA64, який є лише 64 бітним і не має 32-бітового варіанту, і x86 / AMD64, які є, хоча і тісно пов'язаними, різними архітектурами, x86 має лише 32 біт, AMD64 - лише 64 біт.
Власне, це останнє твердження вже не є 100% правдивим. Нещодавно Linux додав x32 ABI, який дозволяє запускати код AMD64 з 32-бітовими покажчиками, тому, хоча це не "правильна" архітектура процесора, це спосіб використання архітектури AMD64 таким чином, як якщо б у неї була рідна 32-бітний варіант. Це було зроблено саме тому, що ефективність роботи, про яку я згадував вище, спричиняла реальні вимірювані, кількісно вимірювані проблеми для користувачів реального користування, які використовують реальний код у реальних системах.