64대세(64비트에 대처하는 우리의 자세)
64비트 컴퓨팅 환경에 대한 관심이 날로 고조되어 가고 있지만, 정작 쓸만한 64 비트 시스템은 시기상조라고 할 수 있다. 윈도우 비스타가 출시 연기된 것을 비롯해, 몇몇 CPU벤더가 64비트 칩을 만들어 내고, 몇몇 OS가 이미 64비트를 지원하고 있지만, 일반 사용자들에게는 그림의 떡일 뿐만 아니라 사실 별 필요도 없다.
64비트 CPU에 64비트 OS를 갖추면 꽤나 그럴싸한 고성능 PC를 가질 수 있을 것만 같은데… 천만의 말씀, 만만의 콩떡이다. 현대의 자본주의 시장이 대개 그러하듯 공급이 수요를 창출하게 되어 있어서, 업체들의 마케팅에 소비자들이 놀아나고 있는 셈이다. 미시적인 관점에서 본다면 4GB를 넘는 메모리를 사용할 수 있다는 점과 고사양 그래픽카드를 쓸 수 있다는 점(이것도 나와봐야 알 수 있지만)을 제외하고는 그다지 달라질 것도 없다. (뒤에 다시 부연하겠음)
게다가 지금 상황에서는 64비트 CPU에 64비트 OS를 깔아봤자, 주변장치가 제대로 동작하지 않고 잘 쓰고 있던 32비트용 프로그램이 설치가 되더라도 오동작하는 할 가능성이 높다. 결국 윈도우 비스타가 나오고 나서 최소 몇 년 간은 기존 장치나 애플리케이션이 64비트 환경에 적응할 시간이 필요한 것이다. (패러다임의 변화란 이래서 쉽게 이루어지지 않는 것이다.)
물론 장기적으로는 64비트 컴퓨팅 환경이 보급되는 것이 바람직하고 고무적인 현상이라고 생각한다. 64비트는 단순히 32비트의 2배가 아니다. 선형적이진 않지만 최대 2^32배로 확장가능한 것이다. 64비트 환경에서는 사실상 ‘제한’이 되는 건 아무 것도 없다. 1990년 대 중반, 16비트 환경이 32비트 환경으로 이동한 것과는 질적으로 다른 변화가 올 것이다. 64비트 환경에서는 엄청난 저장공간(메모리와 디스크), 빠른 처리 속도가 보장될 것이다.
그러나 현재의 64비트 시스템의 상황을 한 마디로 말하자면,
faster and more powerful but less stable (not yet)
이하는 시스템 프로그래머를 위한 내용…
1. int와 long의 차이를 알고 사용하자
int는 32비트와 64비트 환경 모두에서 32비트이다. long은 32비트 환경에서는 32비트이고 64비트에서는 64비트이다.
그러므로, int는 딱 32비트, 2^31내지는 2^32 범위 내에서 사용해도 되는 작은 값을 저장할 때 사용한다. 반면에 long은 시스템 사양이 좋아지면 같이 좋아지는 것들을 저장할 때 사용한다. 사용자 수, 동시 연결 갯수 등등…
2. size_t, off_t, time_t 등의 전용 타입을 사용하자.
여태까지는 이런 크기나 오프셋, 타임스탬프를 위한 전용 타입들이 32비트라고 가정하고 사용해왔다. 아니, 이런 가정조차 생각해본 적이 없는 프로그래머들이 대다수일 것이다. 그냥 int에 담아서 사용한 경우가 많을 것이다. 그러나 이런 타입처럼 미리 시스템에서 정의된 타입이 있으면 그걸 사용하는 게 맞다.
이런 타입에는 다음과 같은 것들이 있다.
size_t, off_t, time_t, ssize_t, pid_t, uid_t, gid_t, mode_t, …
3. OS마다 GCC의 64비트 컴파일 옵션이 달라진다.
1) Solaris는 -m64
2) AIX는 -maix64
3) HP-UX는 -b옵션으로 machine type을 64비트로 지정해야 한다.
* 한가지 주의해야 할 사항이 있는데, 그것은 바로 Linux에서 size_t가 unsigned int로 정의되어 있으므로 다른 OS와의 호환성을 위해 size_t 타입의 데이터를 출력할 때는 반드시 %lu 포맷으로 출력하고 데이터는 (long)나 (unsigned long) 으로 explicit casting을 사용하는 게 바람직하다.