본문 바로가기
프로그래밍

Windows의 프로세스의 가상 주소 공간

by 안플루언서 2011. 1. 21.
32 비트 프로세스의 가상 주소 공간의 포인터값은
0x00000000 ~ 0xFFFFFFFF 까지 표현할수있다.
4GB 의 크기이다.

64 비트 프로세스의 가상 주소 공간의 포인터값은
0x00000000'00000000 ~ 0xFFFFFFFF'FFFFFFFF 까지 표현할수있다.
16EB(엑사바이트) 의 크기이다.

모든 프로세스는 자신만의 가상 주소 공간을 가지기 때문에
A 프로세스의 주소와 B 프로세스의 주소값이 같은 값을 가르키고 있어도 실제로는 다른곳을 참조하는것이다.


각 프로세스의 가상 주소의 공간은 분리가 되어있어
사용자가 직접적으로 사용할수 있는 공간이 정해진다.

  x86 32비트 윈도우 
 NULL 포인터  0x00000000 ~ 0x0000FFFF
 유저 모드  0x00010000 ~ 0x7FFEFFFF
 64KB 접근금지  0x7FFF0000 ~ 0x7FFFFFFF
 커널 모드  0x80000000 ~ 0xFFFFFFFF

NULL 포인터 부분은
사용자가 널포인터 접근에 대한 대비용으로 항상 비어두는 공간.
널 체크 안하고 포인터 사용시 에러는 내기 위한것으로 생각됨.

유저모드는 실제로 사용자가 조작할수 있는 공간..
2GB의 공간.
64비트 프로세스 에서는 8TB 정도의 공간.
유저공간에는 .exe와 DLL 등이 같이 로드가 되므로 실제 2GB를 모두 사용하지 못한다.

커널모드.
프로세스에서 사용되는 커널과 디바이스드라이버 등이 로드된다.
32비트 프로세스에서는 2GB의 공간에도 겨우 넣을 정도로 힘들게 사용이 된다고 한다.

댓글