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


식으로 상황에 맞춰서 사용이 가능하게 해야합니다.

Posted by JJOREG