메모리 영역의 종류

운영체제는 우리가 작성한 프로그램을 위한 메모리를 할당합니다. 

그렇다고 무작정 할당해주지는 않고 용도에 따라 메모리 공간을 할당해 메모리의 효율적 사용을 가능하게 합니다.


그 종류로는 데이터 영역, 힙 영역, 스택 영역 이 있습니다.






데이터 영역

데이터 영역은 전역변수, static 변수를 위한 메모리 공간입니다.

이 둘의 공통점은 시작과 동시에 메모리에 올라가서 프로그램이 종료될 때 까지 남아있다는 것입니다.

이런 변수들이 메모리의 데이터 영역에 지정됩니다.



힙 영역

힙 영역은 필요할 때 동적으로 메모리를 할당하기 위한 영역으로 malloc 등으로 동적으로 선언된 변수들이 메모리 공간의 힙 영역에 저장됩니다.

즉, 할당되어야 할 메모리의 크기를 실행 시간 도중에 결정해야 할 경우가 이에 속하게 됩니다.



스택 영역

스택 영역은 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 메모리 공간입니다.

이 스택 영역은 함수 호출이 시작되는 시점에 사용되는 지역 변수, 매개 변수들이 메모리의 스택 영역에 지정되고 함수 호출이 끝나는 시점에 소멸됩니다.




실제 예


이런 간단한 프로그램이 있다고 가정할 때

각 변수들이 메모리에 저장되는 과정은 아래와 같습니다.





1. 프로그램 실행 : 전역변수 a = 1, 데이터 영역 저장

2. main 함수 호출

3. main 함수 : 첫 번째 지역 변수 b = 2, 스택영역 저장

4. main 함수 : 두 번째 지역 변수이면서 동적배열 c 선언, int형으로 메모리 공간 4바이트 차지, 힙 영역 저장

5. plus 함수 호출

6. plus 함수 : 매개 변수(인자) x = 1, y = 2, 스택영역 저장

7. plus 함수 : 지역 변수 sum = 0, 스택영역 저장

8. plus 함수 : 지역 변수 계산 sum = 3, 스택영역 저장

9.1 plus 함수 리턴

9.2 plus 함수 리턴 후 스택 영역에서 plus 함수가 가지고 있던 지역 변수, 개 변수 소멸

10. 메인 함수 종료 : 메인 영역의 지역 변수들 소멸

11. 프로그램 종료 : 모든 저장된 변수 메모리 내 소멸

'Programming Language > C/C++' 카테고리의 다른 글

네임드 파이프 예제  (0) 2016.04.30
StrSafe 함수들  (0) 2015.09.19
C++ Volatile 키워드  (0) 2014.11.15
C++ 포인터와 레퍼런스의 차이  (0) 2014.11.12
C++ malloc/free와 new/delete의 차이점  (0) 2014.11.12
Posted by 긍정왕오킹