과 같은 코드가 있다면,
프로그램이 실행됨과 동시에 DATA 영역에 전역변수 a가 할당이 되는 것이고,
메인함수에 들어가서 지역변수 b와c가 STACK 영역의 지역변수로 각각 주소값을 가지는 것이다. b변수는 int형이므로, stack영역에서 4바이트만큼의 주소를 가질테고, c변수는 double형이므로 stack영역에서 8바이트만큼의 주소를 가질 것이다.
그렇다면, 이 때 각각의 변수들에게 주소를 할당해주는 역할은 누가 하는 것일까?
이 역할또한 컴파일러가 해준다. 컴파일러는 소스코드도 기계어로 바꿔주며 각각의 변수들도 주소공간의 올바른 영역에 주소값을 무작위로 할당해 주는 것이다.
그럼 왜 굳이 주소공간에 변수들을 저장해야했을까? 그냥 주소공간 없이 영역별로 아무데나 넣으면 안되는 것이였을까?
안된다. 위의 3. 메인메모리 내용에서 말했던 것 처럼, 프로그램이 메모리 상에 올라간 뒤, 이 프로그램들은 동시에 실행되는 것처럼 보이기 위해 CPU상에 올라가서 CPU를 아주 짧은 시간동안 사용할 수 있다.
만약 변수에 주소공간을 할당하지 않아버렸다는 가정하에 예시 코드를 들겠다.
(실제로 그럴일은없다)
댓글 영역