출처: http://blog.naver.com/swjo207?Redirect=Log&logNo=100070903497

프로그램이 메모리에 올라간 모습을 간단하게 살펴보면,
크게 Data Segment와 Code Segment로 나누어 볼 수 있습니다.
즉, 데이터 영역과 동작을 정의한 코드 영역으로 나뉘어 있는 모습이죠.

stack과 heap은 이 Data Segment영역을 이용하게 됩니다.
(어떤 경우엔 Stack Segment가 따로 나뉘어 존재하기도 합니다)
보통 stack은 Data Segment의 처음 영역에서 부터 할당이 되고
heap은 Data Segment의 끝 영역에서 부터 할당이 됩니다.
(반대의 경우도 있습니다)

기본적으로 이 둘의 차이는 자동으로 생성, 제거되는 휘발성의 특성을
갖느냐 그렇지 못 하느냐의 차이가 있습니다.

일반적으로 global이나 static변수들은 heap의 첫부분에 위치하고 있다고
보시면 됩니다. 절대 지워지는 일이 없죠. 또한 malloc()으로 동적 할당
받는 경우에도 heap을 이용하게 됩니다. 나중에 free()하면 다시 그영역
을 쓸 수 있게 됩니다.

그에 비해 함수내부의 local변수들은 stack을 이용합니다. 함수가 호출
되면 stack에 함수 반환시 돌아올 주소영역을 저장하고, 함수에서 쓸
local변수들 크기만큼 할당을 받습니다. - 다시말해서 local 변수들은
stack을 이용하는 것 입니다. 아시다시피 함수가 반환되면 이 stack영역은
자동으로 삭제가 됩니다.


Posted by 세모아
,