본문 바로가기

Programming/Windows Visual C++

C언어의 메모리 구조(Data, Heap, Stack)

  • 프로그램이 OS에 의해 실행되어 프로세스가 되면 이 프로세스는 메모리 공간을 할당받는다.
  • 프로세스에 할당되는 메모리 공간은 Data, Heap, Stack영역으로 나뉜다.
  • Data 영역: 전역변수와 static변수가 할당되는 영역. 전역변수와 static변수는 프로그램이 시작되면 할당되고 종료되면 메모리에서 소멸된다.
  • Heap 영역: 메모리 공간을 동적할당할 때 할당되는 영역. 프로그램 시작시에 정해진 stack영역과는 달리 프로그램 실행 도중(런타임시)에 할당되는 영역이다.
  • Stack 영역: 함수 내의 지역변수와 매개변수가 저장되는 영역. 함수가 호출될 시 생성되고 호출이 완료되면 사라진다. 이 stack영역에 얼만큼의 메모리 공간이 할당될지는 컴파일 시에 결정된다. 함수가 여러번 재귀로 호출되면 이 스택이 꽉 차서 stack overflow가 난다. C언어에서는 실행중인 프로그램에서 stack overflow가 나면 에러를 발생시키고 곧바로 강제 종료 시킨