대부분의 소프트웨어는 32 비트 및 64 비트 Intel / AMD 아키텍처 용으로 컴파일 할 때 동일하게 작동합니다. 그러나 일부 소프트웨어는 그렇지 않습니다. 게으름이나 더 많은 청중에게 도달하는 것 외에도 64 비트로 다시 컴파일하는 것이 효과가없는 몇 가지 이유가 있습니다.
소프트웨어가 안전하지 않은 포인터 작업을 사용할 수 있습니다. 아마도 프로그램은 포인터를 int에 넣습니다. 대부분의 C 및 C ++ 컴파일러의 경우 일반적으로 32 비트입니다. 포인터는 64 비트 프로그램에서 64 비트입니다. 작동하지 않습니다.
사용되는 정수 유형이 다른 크기 인 경우 비트 시프트 연산은 다른 결과를 생성 할 수 있습니다. 다음과 같은 표준 typedef 대신 일반 데이터 유형을 사용할 때 문제가 될 수 있습니다.int32_t
공용체에 사용 된 데이터 형식은 크기를 변경하여 공용체의 동작을 변경할 수 있습니다.
소프트웨어는 32 비트 라이브러리에만 의존 할 수 있습니다. 일반적으로 64 비트 프로그램은 스택, 포인터 등에 대한 가정으로 인해 64 비트 라이브러리에서만 작동합니다.
귀하의 질문에 대한 어려움은 단순히 일부 코드 기반에는 안전하지 않은 작업을 수행하고 안전하지 않은 가정을 수행하며 지름길을 가지며 개발자가 영리한 "최적화"를 수행하는 수백만 줄의 코드가있을 수 있다는 것입니다. 이 코드는 64 비트 환경에서 컴파일되지 않거나 컴파일되지만 쇼 스토퍼 버그가 있습니다. 모든 문제를 해결하는 데 시간이 오래 걸릴 수 있습니다. 회사는 64 비트 버전을 출시 할 수있을 때까지 시간이 지남에 따라이를 고칠 것입니다. 전체 재 작성이 필요하기 때문에 회사는 현재 유지 보수 릴리스와 함께 "버전 2"를 개발할 것입니다.
이야기의 교훈은 깨끗한 코드를 작성하고 컴파일러를 추측하거나 필요하지 않은 영리한 최적화를 추가하지 않고 소프트웨어를 손상시킬 수 있으며 어쨌든 도움이되지 않는 것입니다.
이 기사는이 답변에 포함시킬 수있는 것보다 훨씬 자세하게 설명합니다 .64 비트 플랫폼에서 C ++ 코드를 이식하는 20 가지 문제
sizeof(int)==sizeof(void*)