64비트 컴퓨터란? ---------------------------------------------------------------------------------------------
컴퓨터의 모든 연산처리를 주소값(가상이건 물리적이건) 데이터는주소가 붙고 당연히 그 주소의 값은 0과1로 이루어진 2진데이터 입니다. 32비트 컴퓨터라는 것은 0과 1로 이루어진 숫자들을 주소로 사용할때.
0x00000000000000000000000000000000으로 주소를 표현할수 있는 녀석을 말합니다.
그럼 64비트 컴퓨터란?
0x0000000000000000000000000000000000000000000000000000000000000000 이만큼으로 주소를 표현할 수 있는 녀석을 의미합니다.
보면 간단해 보이지만 이것이 실제 프로그램등에 무슨 영향을 끼치는지 알아봐야 합니다.
메인메모리인 RAM에 있는 데이터를 불러오거나 할때 XX번지에 있는 데이터를 가져와! 라고 CPU가 명령을 내리는데 이때 이 XX번지의 한계가 32비트임을 의미합니다. 32비트로 표현할수 있는 주소값의 한계는 4GB인거죠. 즉 우리가 램을 8기가를 달아봐야 주소값으로 4GB까지의 주소만 표현할수 있기 때문에 나머지 4기가는 버려야 합니다. 32개의 비트가 0x11111111111111111111111111111111 까지 주소를 표현하면 주소값에 대한 물리적 한계에 도달하는 것입니다.
그래서 나온게 64비트입니다. 이 녀석은 말그대로 0x1111111111111111111111111111111111111111111111111111111111111111 까지 주소를 표현할 수 있죠 무려 16테라까지 주소를 표현할수가 있습니다.
물론 단순히 주소만이 아닙니다. 한번에 전달받고 처리할수있는 비트가 32비트이냐 64비트이냐는 굉장히 큰차이 이며 CPU의 처리능력 역시 향상되게 됩니다.
대체 뭐가 달라지는거지? --------------------------------------------------------------------------------------
C++에서 포인터는 컴퓨터의 능력에 따라서 그 크기가 달라집니다. 32비트 컴퓨터에서는 4바이트였던 녀석이지만 64비트에서는 당연히 그 2배인 8바이트로 증가하게 됩니다.
단순히 용량만 증가하는 것이 아니라 그에 맞는 자료형 또한 정의되어야 합니다. __int64는 정수형 int를 대체하고 8바이트를 차치하게 됩니다. 하지만 모든 컴퓨터가 64비트 컴퓨터는 아니므로 필요에 따라서 유동적으로 프로그래밍이 가능하게 구성해야 합니다. 역시나 매크로를 사용하면 손쉽게 표현이 가능해 집니다.
#if definde(_WIN64)
typedef __int64 LONG_PTR;
typedef unsigned __int64 LONG_PTR;
typedef __int64 INT_PTR;
typedef unsigned __int64 UINT_PTR;
#else
typedef long LONG_PTR;
typedef unsigned long LONG_PTR;
typedef int INT_PTR;
typedef unsigned int UINT_PTR;
#endif
식으로 상황에 맞춰서 사용이 가능하게 해야합니다.
'게임개발공부 > 서적공부' 카테고리의 다른 글
윈도우 시스템 프로그래밍 <프로세스의 생성> (0) | 2013.11.16 |
---|---|
시스템 프로그래밍 <프로세스의 기본> (1) | 2013.11.16 |
시스템프로그래밍 <명령어> (0) | 2013.11.13 |
시스템프로그래밍 아스키, 유니코드 (0) | 2013.11.12 |
시스템프로그래밍 공부1 CPU의 구조 (0) | 2013.11.12 |