※ 요약
이번 포스트의 내용은 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까지 늘어난다고 한다.
'프로그래밍 관련 > 프로그래밍 팁' 카테고리의 다른 글
[개발] 각종 진법 변환 계산기 (2진수, 8진수, 10진수, 16진수) (0) | 2016.08.28 |
---|---|
[개발] UAC 관계없이 파일 쓰기나 변경 가능한 폴더 - GetTempPath (0) | 2016.07.12 |
[개발] EasyRGB - 각 종 색상 변환 공식 (0) | 2016.06.14 |
[MySQL] 지난 버전 다운로드 하기 (0) | 2016.01.25 |
BMP 헤더 정보 (0) | 2014.04.21 |