Halo World

OS 메모리 영역 본문

개발 지식/OS

OS 메모리 영역

_Yeony 2017. 6. 2. 13:39

 

 

 

 

 

 | 스택(Stack) 영역

 

  - 프로그램이 자동으로 사용하는 임시 메모리 영역

  - 지역(local)변수, 매개변수, 리턴 값과 같은 임시로 사용하는 것들에 대한 영역

  - 매개변수와 리턴 값은 함수 호출 시 생성, 함수 수행이 끝나면 반환

  - 스택 사이즈는 각 프로세스마다 할당되지만, 프로세스가 메모리에 로드될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없음

  - 명령 실행 시 자동으로 증가/감소하기 때문에 보통 메모리의 마지막 번지를 지정

 

 

 

 | 힙(Heap) 영역

 

 - new(), malloc() 등을 이용하는 동적 할당 객체에 대한 영역

 - 메모리 주소 값에 의해서만 참조되고 사용되는 영역

 - 대개 포인터 변수를 통해 동적으로 할당받고 돌려줌

 

 

 

 | BSS 영역

 

 - 초기화되지 않은 데이터 세그먼트라고도 불리며, 프로그램이 실행될 때 0이나 NULL 포인터로 초기화되는 영역

 - 외부 변수나 static 변수 중 초기화되지 않은 변수들이 정의되는 영역

 

 

 

 | 데이터(DATA) 영역

 

  - 초기화된 데이터 세그먼트라고도 불림

  - 초기화된 외부 변수나 static 변수 등이 저장되는 영역 

  - 함수 내부에 선언된 static 변수는 프로그램이 실행될 때 공간만 할당되고, 그 함수가 실행될 때 초기화됨

 

 

 

 | 코드(CODE) 영역

 

  - 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN 파일 메모리임

  - 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

  - EIP(Extended Instruction Pointer)가 다음에 실행하는 명령을 가리키고 있음

 

 

 

 

 

* 코드, 데이터, 힙 영역은 하위 메모리부터 할당되고, 스택은 상위 메모리부터 할당됨

* 데이터, 스택은 정적 할당 메모리 영역이며, 힙은 동적 할당 메모리 영역

 

 

 

 

참조

http://sfixer.tistory.com/30

http://blog.naver.com/bloodsoda/221015013243

 

'개발 지식 > OS' 카테고리의 다른 글

[OS 문제] 2일차  (0) 2017.07.06
커널과 쉘  (0) 2017.07.06
리눅스 커널모드와 유저모드  (0) 2017.07.04
페이징 교체 알고리즘  (0) 2017.07.02
[OS 문제] 1일차  (0) 2017.07.02