#64bit 포팅 - 32비트 포인터들이여 안녕

less than 1 minute read

포팅을 위해 64bit로 빌드를 하면 갑자기 담배가 급하게 땡기게 된다. 수백 개의 에러를 보면 “어휴~ 이걸 언제 다 잡지?”라는 생각이 절로 든다. 하지만 다 저마다 독특한 상황에서 발생하는 에러가 아니라 에러는 수백 개라도 공통된 패턴이 있기 마련이다. viva64.com에 20 issues of porting C++ code on the 64-bit platform이라는 글에서 가장 많이 발생하는 포팅 이슈 20가지를 정리했다. 포팅 계획 중이거나 시작하는데 아주 좋은 가이드 라인이 되는 글이다.

64bit로 포팅하는 날은 포인터를 32bit로 고정해서 작성한 코드들에 심판을 내리는 날이다. 아니 그렇게 작성한 프로그래머에게 심판을 내리는 날이지. 위에 20가지 포팅 이슈를 정리한 글을 읽다 보니 정말 아차 싶었다. 포인터를 따로 저장할 때 32bit 자료형을 쓰곤 했는데, 이럴때 사용하라고 정의해 놓은 스탠다드 타입이 있었다는 거. ptrdiff_t, uintptr_t, intptr_t 가 그런 타입인데, 이런 타입이 정의돼 있는지도 몰랐다. Standard - MSDN Types를 보니 스탠다드 타입이 이렇게나 많았구나 싶더라. 역시 “있지 싶은데…”라고 생각한 건 다 어디엔가 있다.

nil

글을 읽는 것 외에 VS에서는 이렇게 세팅하고 에러를 다 잡고 시작하는 게 좋은 출발이 될 것이다.

좀 지나면 다시 128bit로 포팅해야 하는 날이 오겠지?