Більшість програмного забезпечення буде працювати однаково при компіляції для 32-ти та 64-бітної архітектури Intel / AMD. Однак деяке програмне забезпечення не буде. Окрім лінощів чи досягнення більшої аудиторії, є деякі конкретні причини, чому перекомпіляція як 64-бітний не спрацює.
Програмне забезпечення може використовувати небезпечні операції вказівника. Можливо, програма ставить покажчик на int, який, як правило, становить 32 біт для більшості компіляторів C і C ++. Покажчики - це 64 біти в 64-бітній програмі. Це не працює.
Операції зсуву бітів можуть давати різні результати, якщо використовується цілочисельний тип іншого розміру. Це може бути проблемою при використанні звичайного типу даних замість стандартного typedef, такого якint32_t
Тип даних, що використовується в об'єднанні, може змінювати розміри, змінюючи поведінку об'єднання.
Програмне забезпечення може покладатися на 32-розрядні бібліотеки. Загалом, 64-бітна програма працюватиме лише з 64-бітовими бібліотеками через припущення про стек, покажчики тощо.
Складність, про яку ви ставите у своєму запитанні, полягає лише в тому, що в деяких кодових базах може бути мільйони рядків коду, які виконують небезпечні операції, роблять небезпечні припущення, мають ярлики та розумні "оптимізації", що вводяться розробниками. Код або не буде компілюватися в 64-бітовому середовищі, або буде компілюватися, але має помилки show-stopper. Щоб виправити всі проблеми, може знадобитися багато часу. Можливо, компанія виправить їх з часом, поки не вийде 64-бітна версія. Можливо, компанія розробить "версію 2" поряд з поточними версіями технічного обслуговування, оскільки необхідна загальна перезапис.
Мораль історії полягає в тому, щоб писати чистий код і не намагатися вдруге відгадати компілятор або додати розумні оптимізації, які не потрібні, можуть зламати програмне забезпечення і, мабуть, не допомогти все одно.
Ця стаття описується набагато детальніше, ніж я міг би сподіватися, щоб включити у цю відповідь: 20 питань перенесення коду C ++ на 64-бітну платформу
sizeof(int)==sizeof(void*)