Одна конкретная причина, почему это может быть трудно, состоит в том, что размеры указателя будут отличаться. Вместо указателя, занимающего 32 бита, указатель теперь будет занимать 64 бита.
Это проблема, если программное обеспечение где-то вводит указатель в int
через reinterpret_cast
в C ++ (что может произойти в каком-то действительно низкоуровневом коде), и это работает, потому что размер int
и указатель были одинакового размера. В основном код предполагал определенный размер указателя.
Другой способ, который может откусить назад, - это если код полон магических чисел, таких как 4
вместо sizeof(void*)
или 0xffffffff
вместо INT_MAX
или что-то подобное.
64-разрядная версия программного обеспечения может отсутствовать, если она зависит от библиотеки или функции, недоступной в 64-разрядной версии. У вас не может быть приложения, которое является 32-битным и 64-битным. Например, в Windows есть функция с именем SetWindowLong
, которая может принимать только 32-битные данные, поэтому она не очень полезна для 64-битных программ, если необходимо передать указатель на функцию. Вот почему есть функция SetWindowLongPtr
, которая может обрабатывать до 64 бит в 64-битных программах и 32 бит в 32-битных программах.
Обратите внимание, что Internet Explorer по умолчанию работает на 32-разрядных версиях даже в 64-разрядных окнах, поскольку подавляющее большинство подключаемых модулей для него доступны только в 32-разрядных версиях. Ярким примером этого является Adobe Flash Player , который доступен только в 32-разрядной версии. Так что, по-видимому, даже для такой крупной компании, как Adobe, портирование для 64-битных систем не всегда может быть тривиальным.
Могут быть затронуты операции битшифтинга. Например, битовое смещение 0x80000
влево на 10 раз в 32 бита дает 0x0
, а битовое смещение 0x80000
влево на 10 раз в 64 бита дает 0x200000000
.
С учетом всего вышесказанного, нет реальной технической причины, по которой слишком сложно переносить приложение на 64-битное , если код написан хорошо. В лучшем случае это простая реконфигурация и завершение проекта. все, что нужно, это восстановить.
Циничная сторона меня говорит, что компании используют это как способ реализации запланированного устаревания - заставляют или поощряют людей обновлять / покупать новейшие продукты!