현재 가장 많이 사용되는 컴퓨팅 시스템은 32bit 주소기반이지만, 향후 PC를 중심으로 64bit 으로 넘어갈 전망이다.

C언어의 경우 프로그램에서 사용되는 정수형을 살펴보면, short, int, long, long long 이 있는데 사용되는 시스템의 성격에 따라 32bit과 64bit에서 그 크기가 다를 수 있다.

예를 들어 int 형의 크기가 32bit 시스템에서는 32bit 으로 표현되지만, 64bit 시스템에서는 64bit으로 표현될 수도 있다. (ILP64)
이것은 32bit 시스템에서 잘 돌아가던 프로그램이 64bit에서는 오류를 일으킬 수 있다는 것인데, 프로그램 작성시 신경을 쓸 필요가 있다.

이러한 규칙을 정한 모델이 있는데 아래와 같다.


원래 int형은 그 시스템에서 가장 효율적이라고 추천하는 데이터 형이기 때문에 그 시스템의 word형으로 정한다.
따라서 64bit 시스템에서는 int형을 64bit으로 정하는 것이 이치이다. 하지만, 앞서 언급한 32bit과의 호환 문제 때문인지는 확실하지 않으나 Windows나 Unix 진형 모두 64bit 시스템에서도 int형을 32bit으로 유지하고 있다. 
int형과 달리 long형에서는 서로 다른 입장을 보이고 있다.

LP64진영의 주장은 프로그램에서 메모리 주소를 처리하는 변수를 int형으로 할 경우 64bit시스템의 주소를 모두 커버할 수 없어 주소를 담는 변수는 long형으로 하여 64bit시스템에서 문제가 없게 하자는 것이다. 개인적으로 이 주장은 설득력이 있다.

이러한 혼란을 막기 위해 프로그램시 int, long과 같이 정수형 예약어 그대로 사용하지 않고 tint32 또는 tint64 식의 재정의 하여 사용하는 기법이 주로 사용된다.

그러나, 잘 생각해 보면 primitive형을 사용해도 상관없다.  왜냐하면 ILP64나 SILP64는 거의 사용되지 않는 데이터모델이기 때문에 제외하고 LLP64와 LP64만 고려하면,  long형만 다른데 long형은 사용하지 않으면 된다.

메모리의 주소를 다룰때도 보통 포인터형을 사용하기 때문에 문제가 없다.

결론은 LP64, LLP64 고민하지 말고 프로그래밍시 int와 long long만 사용하도록 하자.

저작자 표시 비영리 변경 금지
신고
Write your message and submit
« PREV : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : ... 228 : NEXT »