본문으로 바로가기

[C언어] 실행된 프로그램과 메모리

category C 2014. 5. 2. 15:11

실행된 프로그램은 메모리로 로드되며, 

메모리에 올라온 프로그램은 코드 섹션과 데이터섹션으로 구분된다.

 

코드 섹션(Code Section): 기계어 코드(program code)

데이터 섹션(Data Section): 데이터의 저장

  - 전역 메모리 (Global Memory)

  - 스택 메모리 (Stack Memory)

  - 힙 메모리 (Heap Memory)

 

<단순 메모리 구조>

높은번지↓(High Address)


 

 

힙(Heap Memory)

 

 

 

 

미사용 공간(Available)

전역(Global Memory)

스택(Stack Memory)

낮은번지↑(Low Address)

기계어 코드(Machine Code)

 

 

전역 메모리 (Global Memory)

전역 변수(Global Variables)와 정적 변수(Static Variables)가 저장되는 곳

프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸된다.

예)

int start = 0;

void main()

{

    static int count = 0;

}

 

 

스택 메모리 (Stack Memory)

지역 변수(Local Variables)와 매개 변수(Parameter Variables)가 저장되는 곳

이 영역에 할당된 변수는 함수 호출이 완료되면 사라지는 특징을 가진다.

컴파일 타임에 크기가 결정된다.

예)

void main()

{

    int a;

}

 

힙 메모리 (Heap Memory)

동적 메모리 할당을 위한 곳, (C에서는 malloc/free , C++ 에서는 new/delete)

힙 메모리의 크기는 운영체제가 정한 최대 가상 메모리 만큼이다.

런타임(프로그램 실행 시간)에 크기가 결정된다. 

예)

void main()

{

    char *p = (char *)malloc(1000*sizeof(char));

}