ipwn
[memory] 메모리 구조 본문
함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다.
3. 스택 (stack) 영역
프로그램이 자동으로 사용하는 임시 메모리 영역이며, 지역(local) 변수, 매개변수(parameter), 리턴 값 등
잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다. stack memory는 함수 호출 시 생성되고, 함수가 끝나면
시스템에 반환 된다. 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.
스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에
스택 사이즈를 바꿀 수는 없다. 명령 실행시 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정 한다.
스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출한다. 이러한 스택은
후입선출(LIFO, Last-in First-Out) 방식에 따라 동작하기 때문에 가장 늦게 저장된 데이터가 가장 먼저 인출된다.
4. 힙 (heap) 영역
힙 영역은 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며,
메모리 주소값에 의해서만 참조되고 사용되는 영역이다. C에서는 이 영역에 데이터를 저장하기 위해서
malloc,calloc,realloc 같은 함수를 사용한다. 힙 영역은 스택 영역과는 반대로 메모리의 낮은 주소에서 높은
주소의 방향으로 할당된다. 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는'
메모리 영역이라고 할 수 있다.
이러한 메모리 구조들을 C 코드로 표현하자면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<stdio.h> #include<stdlib.h> int n = 0;//n은 초기화 된 전역변수로써 데이터 영역에 저장 int multi(int n1) {// n1은 매개변수로써 스택에 저장 static int test;//test는 초기화 되지 않은 정적변수로써 BSS에 저장 int n2 = 3;//n2는 지역변수로써 스택에 저장 return n1 * n2;//리턴 값도 스택에 저장 } int main() { scanf("%d", &n);//scanf와 같은 코드는 코드 영역에 저장 int *pArr= (int *)calloc(1, sizeof(int) * n);//동적할당된 메모리는 힙에 저장 printf("%d", multi(n));//printf와 같은 코드는 코드 영역에 저장, 반환 된 + 출력 될 multi(n)의 값은 데이터 영역에 저장 } | cs |
위와 같이 설명 및 표현 할 수 있다.
'Programming' 카테고리의 다른 글
C) 포인터, 문자와 문자열 처리 함수, 구조체 (0) | 2017.12.27 |
---|---|
C) 코드업 함수문제 풀이 (0) | 2017.12.18 |
C) swap 함수 구현 (0) | 2017.12.18 |
C) 포인터 (0) | 2017.12.18 |
C) strlen, strcmp, strcpy 함수 조사 및 구현 (0) | 2017.12.18 |