C++ 프로그래밍

64Bit Programming Models: Why LP64?

하늘흐늘 2009. 8. 22. 18:40
반응형

64-Bit Programming Models: Why LP64?

Open Systems community에서 왜 LP64모델을 Unix표준으로 선택하였는가에 대한 요약입니다.
LP64모델을 선택하기 위하여 포팅성(Portability), 32bit 환경과의 상호운용성(Interoperability with 32bit Enviroments), 표준 준수(standards conformance), 성능(performance effects), 전이비용(transition costs)을 고려하였습니다. 
64bit모델을 고려하기 시작한 것은 H/W발전에 따라 4G이상의 주소에 직접적으로 억세스하려고 하는 것을 필요로 해졌기 떄문입니다. 기존의 64bit 환경에 대한 경험상 해당 환경의 개발자들은 32bit 프로그램과의 소스 호환성과 데이터 상호운용성을 중요시 한다는 것을 알 수 있었습니다. LP64는 long형을 이용하여 표준을 준수하면서도 필요에 따라 64bit 성능향상의 이점을 얻을 수 있으며 int형을 변경할 필요가 없어 전이비용(소스수정비용)이 상대적으로 저렴합니다. 그래서 64bit형으로 The Open System Community는 LP64를 명백한 선택으로 정합니다.

굉장히 딱딱하게 쓰여진 이 글 중 아래와 같은 모델들간의 차이와 장단점을 보면서 64bit 프로그래밍에 대하여 직관적인 이해를 얻을 수 있습니다.
   

모델별 데이터타입의 바이트수
Datatype LP64 ILP64 LLP64 ILP32 LP32
char 8 8 8 8 8
short 16 16 16 16 16
_int32 32
int 32 64 32 32 16
long 64 64 32 32 32
long long 64
pointer 64 64 64 32 32


LLP64
한마디로 표현하여 64bit 포인터를 가지고 있는 32bit 모델로서 64bit 데이터형을 표현하기 위해서는 비표준형인 long long형을 사용해야 한다. 가장 쉽게 생겨날 수 있는 문제는 포인터를 데이터형으로 변환하거나 그 반대로 변환하는 경우 사이즈가 틀려지는 문제가 있습니다.
이 데이터 모델을 선택할 경우, 기존의 인터페이스가 64bit형을 지원하도록 변경하거나 새로운 64bit 처리를 위한 API를 제공해야 합니다.  (4G이상의 파일처리를 하는 경우를 생각해 보면 쉬울 듯 합니다.)

ILP64
32bit 시스템과의 호환성이 좋지 않다. 32bit 시스템과 호환성을 유지하기 위하여 별도의 비표준 타입을 써야한다. 현실적으로 서버와 같은 특수 부분에만 64bit 프로세스가 사용되며 대부분의 경우 32bit와의 소스 레벨 혹은 데이터 교환과 같은 부분에서의 호환성이 중요합니다.

LP64
int형은 호환성을 가지며 표준형인 long형은 포인터와 서로 변환될 수 있는 구조를 가진다. 과거 16bit시절 int는 16bit였고 long은 32bit였기 떄문에 자연스럽습니다.
반응형