메모리 영역의 종류
운영체제는 우리가 작성한 프로그램을 위한 메모리를 할당합니다.
그렇다고 무작정 할당해주지는 않고 용도에 따라 메모리 공간을 할당해 메모리의 효율적 사용을 가능하게 합니다.
그 종류로는 데이터 영역, 힙 영역, 스택 영역 이 있습니다.
데이터 영역
데이터 영역은 전역변수, 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 |