C & C++, 일반

[프로그래밍 일반] Heap, stack, static 영역의 메모리

그레이트쪼 2017. 1. 7. 18:18

힙, 정적 메모리 합쳐서 256MB 이내, 스택 메모리 1MB 이내 

  • 프로그래밍 문제에서 위와 같은 제약사항이 나오는데 사용되는 메모리 영역에 대해서 알아보자
  • 메모리 공간은 크게 스택(statck), 힙(heap), 데이터(data)영역으로 나뉘어진다.
    (위의 조건에서 정적 메모리라는 것이 데이터 영역을 의미하는 것으로 보인다.)

 

  • 데이터(Data) 영역 (정적 메모리)
    • 전역 변수와 static 변수가 할당되는 영역
    • 프로그램의 시작과 동시에 할당되고 프로그램이 종료되어야 메모리에서 소멸됨
  • 스택(Stack) 영역
    • 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역
    • 함수 호출이 완료되면 사라짐
  • 힙(Heap) 영역
    • 동적으로 할당된 변수
  • 프로그래밍 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
void foo(int a);
 
int val = 10;                      // 'val' in data segment
char string[] = "Hello World";    // 'string' in data segment
 
int main() {
    int i = 100;    // 'i' in stack area
    foo(i);
    return 0;
}
 
void foo(int a) {   // 'a' in stack area
    int* ptr = (int*) malloc(sizeof(int)*a);   // 'ptr' in heap area
}