32비트, 64비트에서의 프로세스당 사용 가능한 최대 메모리


※ 요약
이번 포스트의 내용은 32비트나 64비트 윈도우에서 프로세스당 사용 가능한 최대 메모리에 대한 내용이다. 윈도우를 기준으로 작성하였고, 리눅스에서는 아마 적용이 안될것으로 생각된다.

※ 프로세스가 각 비트에서 사용 가능한 최대 메모리
32비트 : 2GB
64비트 : 8TB

※ 설명
책이나 학교에서 배운대로 라면 32비트는 2^32로써 4GB를, 64비트는 2^64로써 16EB의 주소 공간을 가질 수 있어야 하지만 위의 설명에서는 각각 2GB와 8TB만 사용할 수 있다고 하였다. 이는 각 프로세스가 할당 받은 가상 주소 공간은 분할되어 있고, 분할된 영역 중에 사용할 수 있는 메모리 공간이 각각 2GB와 8TB이기 때문이다.
참고로 아래는 32비트일때 분할된 각 공간의 크기다. 유저 모드 파티션이 프로세스가 사용 가능한 공간으로써 0x00010000 ~ 0x7FFEFFFF를 계산해보면 2047MB로써 대략 2GB가 된다는 걸 알 수 있다.

 Null 포인터 할당 파티션

 0x00000000 ~ 0x0000FFFF

 유저 모드 파티션

 0x00010000 ~ 0x7FFEFFFF

 64KB 접근 금지 파티션

 0x7FFF0000 ~ 0x7FFFFFF

 커널 모드 파티션

 0x80000000 ~ 0xFFFFFFFF


참고로 주소 공간 분할은 윈도우 커널 버전에 따라 조금씩 다를 수 있으며, 제작하려는 프로그램이 2GB 이상의 메모리를 사용한다면 64비트로 컴파일해야 할 것이다. 또 Visual Studio라면 "프로젝트 속성 -> Linker -> System -> Enable Large Addresses" 설정을 통해 사용할 수 있는 최대 메모리가 3GB까지 늘어난다고 한다.




작성자

Posted by 사용자 오뇽

태그

관련 글

댓글 영역