윈도우7이 인기를 끌면서 64비트 프로그래밍(64-bit programming)은 거스를 수 없는 대세가 되었다. 아래 정보를 확인해 이전에 짜둔 Visual Studio의 32비트 코드를 64비트로 바꾸어 보자.
[64비트용 솔루션 플랫폼(solution platform) 생성]
1. “구성 관리자 -> 활성 솔루션 플랫폼 -> 새로 만들기”에서 ‘x64’를 추가함
2. “활성 솔루션 구성”에 “Debug x64”, “Release x64”를 추가하고 플랫폼을 모두 ‘x64’로 바꿈: "활성 솔루션 플랫폼"을 'x64'로 바꾸면 모든 솔루션이 x64로 바꾸므로 플랫폼 항목만을 바꾸자.
현재 컴파일러가 64비트 모드에서 동작 중인지 확인하려면 '_WIN64' 정의 여부를 확인하면 된다. 이걸로 확인이 안된다면 "구성 속성 -> C/C++ -> 전처리기 -> 전처리기 정의"에 'WIN64'를 추가하면 해결된다. 한가지 조심할 것은 '_WIN32'이다. 이 정의는 32비트와 64비트 모두에서 사용되기 때문에 '_WIN32'를 이용해 32비트 유무를 판별해서는 안된다. 반드시 '_WIN64'를 써야 한다.
[데이터 변환]
- int -> INT64, __int64, long long
- long -> LONG64, __int64, long long
- unsigned int -> UINT64, usigned __int64, unsigned long long
- unsigned long -> ULONG64, usigned __int64, unsigned long long
- INT_PTR, UINT_PTR, LONG_PTR, ULONG_PTR처럼 ..._PTR로 끝나는 변수는 컴파일러가 32비트 모드인지 64비트 모드인지에 따라 선언되는 변수 종류가 자동으로 달라짐
- int 상수 1 -> 1i64
- long 상수 1L -> 1LL
- unsigned int 상수 1 -> 1ui64
- unsigned long 상수 1UL -> 1ULL
double에 대해서는 변경할 것이 없다. long double이든지 double이든지 컴파일러는 동일한 코드를 만든다.
[참고문헌]
[1] 유병인, "[64비트 윈도우 프로그래밍] ① 32비트 프로그램을 엄호하라", ZDNet Korea, 2008.
[2] 유병인, "[64비트 윈도우 프로그래밍] ② 64비트 윈도우 파악하기", ZDNet Korea, 2008.
[3] 유병인, "[64비트 윈도우 프로그래밍] ③ 64비트 프로그램으로 가는 길", ZDNet Korea, 2008.
[4] "64비트 기반 프로그래밍", hacker dakuo, 2010.