본문 바로가기

컴퓨터 기초

메모리 구조

[프로그램의 실행 순서]

[프로그램의 실행 순서]

프로그램 실행 순서

  1. 프로그램의 실행을 요청한다.
  2. 실행을 위해 프로그램의 정보를 얻어 메모리에 로드한다.
  3. CPU는 프로그램 코드를 가져다 메모리를 관리,명령문을 실행한다.
  4. 동적 메모리가 할당되면 FreeStore  영역을 사용한다 (위에서 아래로)
  5. 스택 메모리가 할당되면 FreeStore 영역을 사용한다 (아래에서 위로)

[메모리 공간]

[메모리 공간]

컴퓨터의 운영체제 (OS)는 프로그램의 실행을 위한 다양한 메모리 공간을 제공하고 있다.

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다.

[코드 영역]

작성한 소스코드가 들어가는 부분이다 (실행할 프로그램의 코드) .텍스트 영역이라고도 부른다.

실행파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수,제어문,상수등이 지정된다.

CPU는 코드영역에 저장된 명령어를 하나씩 가져가 처리한다.

 

[데이터 영역]

전역변수와 정적 (static) 변수가 할당되는 영역이다.

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

 

[스택 영역]

함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역이다. 컴파일 타임에 크기가 결정된다

스택 영역은 함수호출과 함께 할당,함수의 호출이 종료시 소멸된다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라 한다.

(함수의 매개변수 / 호출후 돌아갈 반환 주소값 / 함수선언 지역변수등 )

메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

 

[힙 영역]

프로그래머가 할당/해제하는 메모리 공간이며 , Java는 가비지 컬렉터가 자동으로 해제한다.

이 공간에 메모리를 할당하는 것을 동적 할당 (Dynamic Memory Allocation)이라한다.

메모리의 낮은 주소에서 높은 주소로 할당된다.

런타임에 크기가 결정된다.

 

[오버플로]

스택과 힙은 같은 공간을 공유하고 있다 . 각 영역이 상대 공간을 침범할때 스택 혹은 힙 오버플로라 한다.

해당 프로그램은 오작동을 하거나 보안상 큰 취약점을 가진다. 따라서 C 언어에서는 에러발생후 바로 강제종료를 한다.

 


출처