64 비트 컴퓨터에서 실행되는 응용 프로그램을 개발 중입니다.32 비트 64 비트 호환
그러나 우리는 변경할 수없는 32 비트 정수가있는 라이브러리를 사용하고 있습니다. 64 비트 컴퓨터에서 컴파일하고 실행해야합니다.
응용 프로그램이 실행 중일 때 어떤 영향이 있습니까? 주변에 어떤 문제가 있습니까? 어떤 조언을
많은 감사,
64 비트 컴퓨터에서 실행되는 응용 프로그램을 개발 중입니다.32 비트 64 비트 호환
그러나 우리는 변경할 수없는 32 비트 정수가있는 라이브러리를 사용하고 있습니다. 64 비트 컴퓨터에서 컴파일하고 실행해야합니다.
응용 프로그램이 실행 중일 때 어떤 영향이 있습니까? 주변에 어떤 문제가 있습니까? 어떤 조언을
많은 감사,
라이브러리의 출처가 있으십니까? 그렇다면 컴파일하고 다시 컴파일하면 라이브러리 작성자가 x86-64 용으로 컴파일 할 때 손상된 가정을하지 않는 한 그 라이브러리를 사용하지 못하게 될 수 있습니다. 열심히 테스트하고 오래 테스트하십시오.
에 소스 (i386 컴파일 된 바이너리 만 있음)가 없으면 링커에서 x86-64 코드를 링크 할 수 없게됩니다. ABI는 호환되지 않습니다.
두 번째 경우에는 32 비트 라이브러리로 연결되는 별도의 32 비트 도우미/래퍼 프로세스를 만들어야하며 IPC 메커니즘을 통해 64 비트 프로세스에서 라이브러리를 호출하도록 요청해야합니다 (결과를 반환). IPC 주변의 64 비트 측면에서 래퍼 함수를 생성하여 라이브러리에 대한 일반 호출처럼 보이게 할 수 있습니다. 64 비트 프로세스는 시작할 때 32 비트 도우미 프로세스를 시작해야합니다 (부모 프로세스가 사라지면 도우미 프로세스가 종료되었는지 확인해야합니다).
난 당신에 대한 64 비트를 이야기 할 때 당신이 여기 x86 및 x86_64의 의미 있으리라 믿고있어.
int
은이 두 아키텍처에서 모두 32 비트입니다. 당신이 생각하는 경우
당신이로 실행하는 경향이 유일한 문제
은 다음과 같습니다sizeof(void*) == sizeof(int)
는sizeof(int) == sizeof(long)
long
또는 long long
의 크기는 같은 크기입니다.그렇지 않으면 괜찮을 것입니다.
"int는 항상 32 비트입니다."- 사실이 아닙니다. 유일한 요구 사항은 int가 적어도 16 비트를 가지며'sizeof (short) <= sizeof (int) && sizeof (int) <= sizeof (long)'입니다. 실제로 int는 일반적으로 16 비트 시스템에서 16 비트입니다 (더 이상 주위에있는 많은 사람들이 아닙니다). – sepp2k
나는이 질문을하는 모든 컴퓨터 사용자가 32 비트 정수를 가지며 이미 언급했음을 생각합니다. 어쨌든 내 대답을 수정했습니다. –
어떤 운영체제입니까? –
Windows XP x86 및 Vista x64 비트의 경우. 나는 단지 정수로 계산하는 것에 대해 궁금해했다. 나는 틀린 대답을 얻을 것입니까? – ant2009