Большая часть программного обеспечения будет работать одинаково при компиляции для 32- и 64-разрядных архитектур Intel / AMD. Однако некоторые программы не будут. Помимо лени или охвата большей аудитории, есть некоторые конкретные причины, по которым перекомпиляция в 64-битную систему не будет работать.
Программное обеспечение может использовать небезопасные операции с указателями. Возможно, программа помещает указатель в int, который обычно является 32-битным для большинства компиляторов C и C ++. Указатели 64-битные в 64-битной программе. Это не работает.
Операции сдвига битов могут давать разные результаты, если используемый целочисленный тип имеет другой размер. Это может быть проблемой при использовании обычного типа данных вместо стандартного определения типа, такого какint32_t
Тип данных, используемый в объединении, может изменять размеры, изменяя поведение объединения.
Программное обеспечение может полагаться только на 32-битные библиотеки. В целом, 64-битная программа будет работать только с 64-битными библиотеками из-за предположений о стеке, указателях и т. Д.
Трудность, о которой вы спрашиваете в своем вопросе, заключается в том, что в некоторых основах кода могут быть миллионы строк кода, которые выполняют небезопасные операции, делают небезопасные предположения, имеют ярлыки и умные «оптимизации», вводимые разработчиками. Код либо не скомпилируется в 64-битной среде, либо скомпилируется, но содержит ошибки show-stopper. Чтобы решить все проблемы, может потребоваться много времени. Возможно, компания исправит их со временем, пока не появится возможность выпустить 64-битную версию. Возможно, компания разработает «версию 2» наряду с текущими выпусками обслуживания, потому что необходимо полное переписывание.
Мораль этой истории состоит в том, чтобы писать чистый код и не пытаться угадать компилятор или добавлять умные оптимизации, которые не нужны, могут сломать программное обеспечение и, вероятно, в любом случае не помогут.
Эта статья раскрывает гораздо больше деталей, чем я мог бы включить в этот ответ: 20 вопросов о переносе кода C ++ на 64-битную платформу
sizeof(int)==sizeof(void*)