[[프로그래밍_NOTE]]/C , C++

윈도우의 가상메모리 영역

갑빠돌격기 2008. 7. 27. 17:04
/////////////////////////////////////////////
환경 : Windows XP , Visual C++ 6.0
////////////////////////////////////////////

///source
/************************************************************************
virtualMemory.c
written by SeungHwan
*************************************************************************/
#inlucde<stdio.h>

void main()
{
    int *pInt ;
    printf("%x\n" , pInt);
    *pInt = 10;
}

///result
cccc cccc
!!!! 실행 중  error발생 -> 프로세스가 죽는다.

===============================================
소스코드에는 문제가 없어보인다.
그러나 왜 실행시에 중단될까?

이유는 간단하다.
windows 프로그래밍에서는 사용자가 초기화 시키지 않는 변수는
cccc cccc 으로 초기화 된다.
이 영역은 프로세스 가상메모리 4GB중
OS영역의 메모리 영역에 속하므로 사용자가 값을 할당할수 없으며 , 심지어 읽을수도 없다.

이곳에다가 *pInt = 10 이라는 값을 할당하려 했으므로
OS가 자동으로 프로세스의 실행을 멈추는 것이다.
(보호차원이라고 한다.)
위와 같은 문제를 해결하기 위해서는 프로그램 코딩시에
선언된 변수는 꼭 초기화 해주는 습관을 들이는 것이 좋다.

Unix , Linux 같은 경우 동일한 코드에 대해서는 아무 문제 없이 잘 수행된다.

ps : process는 virtual Memory , Handle Table , Primary Thread으로 구성된다.
Window XP는 4G의 가상 메모리를 구성한다.
(32bit OS는 Address Bus 가 32bit이다.)

사용자 삽입 이미지