sacru2red

Visual BASIC 6.0 Developer

x86_x64_32비트와 64비트_프로세스

인텔의 초기 CPU 모델은 80286, 80386, 80486, 80586(팬티엄) 같은 이름이 붙여졌다. 이는 80x86의 규칙으로 쓸 수 있고 줄여 x86이라는 표현을 썼다. 대체로 인텔 CPU와 호환되는 CPU 제품을 x86이라 부른다. 32비트/64비트를 구분할 때도 x86이라는 용어를 쓴다. x86은 32비트를, x64는 64비트를 의미한다.

레지스터는 CPU내에 존재하는 기억장소다. 64비트 CPU는 레지스터하나에 담을 수 있는 비트의 수가 64개임을 의미한다. 일반적은 클라이언트 프로그램은 디스크상에 파일로 존재하다가 실행될 때 메모리에 올라오고, 이 내용이 레지스터로 옮겨져서 해석된다.

윈도우 운영체제에서 동작하는 모든 프로그램은 운영체제에서 제공되는 기능을 이용한다. 그 기능을 API라고 하며, 확장자가 DLL인 파일에서 제공된다. 윈도우가 16비트이던 윈도우3.1에서는 Win16 API라는 이름으로 불리다가 32비트 운영체제인 윈도우95가 나오면서 Win32 API라고 불려지기 시작했다. 현재는 64비트 운영체제가 대부분 사용되니 Win64 API가 맞지만, Win32라는 표현이 워낙 퍼져 일반적인 호칭으로 “Win32 API “를 사용한다.

64비트 윈도우의 경우 32비트에 대한 호환성을 갖고 있어 32비트 응용프로그램을 그대로 실행할 수 있다. 대신 32비트의 제약을 가진채 실행된다. 또한 실행하기 위해 WoW64(Windows 32bit on Windows 64bit)라는 변환층을 둔다. 따라서 32비트 운영체제에서 32비트 응용프로그램을 실행했을 때보다 느리다.

64비트 응용프로그램은 64비트 운영체제에서만 실행된다. CPU와 메모리간 데이터 이동이 64비트 단위로 발생하고 CPU 내의 레지스터 크기가 64비트이므로 한번에 64비트 데이터만큼 계산할 수 있다.

32비트 실행파일과 64비트 실행파일은 동일한 프로세스에 로드될 수 없다. 예로 32비트로 컴파일된 응용프로그램(DLL)은 64비트로 컴파일된 응용프로그램(EXE, DLL)과 함께 사용할 수 없으며, 그 반대도 마찬가지다.

Written on April 9, 2019