메모리 영역 구조

프로그램을 실행하게 되면 해당 프로그램은 메모리 영역에 올라간다. 이렇게 메모리 영역에 올라가 있는 코드나 데이터를 CPU에서 필요한 명령어나 데이터를 읽어서 프로그램이 실행되게 되는데 크게 4가지로 구분된다.


코드영역

  • 실제 프로그램 코드가 적재되는 영역이다. C나 JAVA등 개발 언어로 코딩된 프로그램은 컴퓨터가 이해할 수 있는 기계어의 형태로 컴파일 되어 파일등에 저장되는데, 실제 이 파일에 대한 전체적인 코드 자체가 올라가는 영역이다.
  • 프로그램 명령이 위치하는 곳으로 기계어제어되는 메모리 영역이다.

데이터 영역

  • 프로그램이 실행되면서 필요한 변수가 저장되는 영역
  • 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.
초기화 된 데이터는 데이터 영역에 저장된다.
초기화 되지 않은 데이터는 BSS 영역에 저장된다
  • 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 된다.
  • 함수 내부에 선언된 정적변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다.

스택 영역

  • 프로그램이 자동으로 사용하는 임시 메모리 영역이다.
  • 지역변수(local), 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.
  • 함수 호출 시 생성되고, 함수가 종료 되면 시스템에 반환한다.
  • 스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈고정되어 있어, 런타임 중에 스택 사이즈를 바꿀 수 없다.
  • 명령 실행시 자동 증감되기 때문에 보통 메모리 마지막 번지를 지정한다.

힙 영역

  • 힙 영역은 위(스택, 데이터)에서 관리가 가능한 데이터 외에 다른 형태의 데이터를 관리하기 위한 빈 공간 입니다.
  • 동적 할당을 통해 생성된 동적 변수를 관리하기 위한 영역이다.
  • JAVA나 C++ 에서는 “new” 를통해, C에서는 “malloc”, “calloc”등을 통해 동적으로 생성되는 변수를 저장하기 위해 할당되는 영역이다.
  • 데이터 영역과 스택 영역은 컴파일러가 미리 공간을 예측하고 할당할 수 있지만, 동적 변수는 어느 시점에 어느 정도의 공간으로 할당 될지 정확하게 예측할 수 없기 때문에 프로그램 실행 중에 결정된다.
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.