프로그램이 사용하는 메모리는 일반적으로 세그먼트라고 하는 몇가지 다른 영역으로 나뉜다.
세그먼트
서로 크기가 같게 블록을 분할하는 페이지와는 달리, 세그먼트는 논리적 의미에 부합하도록 서로의 크기가 다르며 각각의 세그먼트들은 연속적인 공간에 저장되어있다.
따라서 전체 세그먼트가 하나의 단위로 보조기억장치에서 메모리로의 연속적인 가용 공간에 적재되며 최초 적합 등의 방법으로 주기업장치를 할당한다.
- 코드 세그먼트: 컴파일된 프로그램이 저장되는 영역
- 데이터 세그먼트: 전역 변수 및 정적 변수가 저장되는 영역
- 힙 세그먼트: 동적으로 할당된 변수가 할당되는 영역
- 스택 세그먼트: 함수 매개 변수, 지역변수, 기타 함수 관련 정보가 저장되는 영역
스택과 힙
스택
LIFO(last in, first out) 데이터 구조로 cpu에 관리되고 최적화된다.
cpu가 스택메모리를 구성하기 때문에 스택 변수를 읽고 쓰는 속도가 매우 빠르다.
스택의 핵심은 함수가 종료되면 모든 변수가 스택에서 팝아웃 된다. 즉, 스택 변수는 생성 된 함수가 실행되는 동안에만 존재한다.
또 다른 특징으로는 스택에 저장할 수 있는 변수의 크기에 제한이 있다는 것이다. 따라서 int, float등 길이가 고정되어 있는 변수는 스택에 저장한다. 또, 크기가 고정되어 있기 때문에 주소가 매번 같다. 따라서 현재 값이 어느 주소인지 알기 때문에 전역 변수로 사용이 가능하다. (static)
힙
FIFO(First In First Out)구조로, 힙은 자동으로 관리되지 않고 cpu가 엄격하게 관리하지 않는 컴퓨터 메모리 영역이다. 때문에 길이가 고정되어 있지 않고, class, 리스트, 객체 등은 가변적인 힙에 할당된다. 때문에, 힙은 선두번지가 다르며, 힙 메모리는 포인터를 사용해 힙의 메모리에 액세스를 해야하기 때문에 읽기와 쓰기가 느리다는 단점이 있다.
'코딩 > 스터디' 카테고리의 다른 글
[코드 구현] logistic regression (0) | 2021.08.06 |
---|---|
[자바 스크립트] 최신 트렌드 (0) | 2020.09.25 |
[PLC] 기초 이론 (0) | 2020.09.22 |
2진수 (0) | 2020.09.22 |
16진수 (0) | 2020.09.22 |