크래프톤 정글 47일차

9.9 동적 메모리 할당
C프로그래머들은 실행 중 동적 메모리 할당기를 사용해 가상 메모리를 추가하는 것이 더 편리하다고 느낀다.
힙의 개념

- 힙은 초기화되지 않은 데이터 영역 바로 다음에 시작하여 위쪽으로 성장하는 demand-zero 메모리 영역이다.
- 커널이 유지하는 힙의 맨 위를 가리키는 변수를 brk라고 한다.
9.9.4 단편화
단편화 : 메모리나 저장장치를 사용할 때, 작은 조각들이 여기저기 흩어져서 전체 용량은 남았지만, 큰 덩어리를 연속으로 사용하지 못하는 상태
가용 메모리 : 사용가능한 물리메모리 용량
할당기 : 프로그램이 필요할 때 메모리를 동적으로 빌려주고, 다 쓰면 돌려받아 관리하는 소프트웨어 구성 요소
단편화의 종류
내부 단편화
- 할당된 블록이 데이터 자체보다 더 클 때 일어난다.
- 아래의 그림처럼 할당기는 정렬 제한사항을 만족시키기 위해 블록의 크기를 증가시킬 수 있다.

- 내부 단편화는 계산하기가 간단하다. 단순히 할당된 블록 크기와 실제 사용된 데이터 크기 간의 차이들의 합이다.
외부 단편화
- 메모리 공간은 있지만, 요청을 처리할 수 있는 단일한 가용블록은 없는 경우에 발생한다.

- 만약 위의 그림에서 요청한 워드가 2워드가 아닌 8워드였다면, 힙에 8개의 가용워드가 남아 있지만, 커널에서 추가적으로 가상메모리를 요청해야한다.
- 외부 단편화가 내부 단편화보다 더 측정하기 어려운데 그 이유는 이전 요청의 패턴과 할당기 구현에만 의존하는 것이 아니라, 미래의 요청 패턴에도 의존하기 때문이다.
->그래서 할당기들은 대개 많은 수의 더 작은 가용 블록들보다는 더 적은 수의 더 큰 가용 블록들을 유지하려는 방법을 채택하고 있다.
9.9.13 명시적 가용 리스트
범용 할당기 : 프로그램이 실행될 때 필요한 메모리를 동적으로 할당하고 해제할 수 있도록 해주는 표준적인 메모리 관리 도구
명시적 가용 리스트 : 동적 메모리 할당기가 해제된(free) 블록들만 따로 연결 리스트로 관리하는 방법
이더넷은 통신 규약, 상용화된 메모리 버스 같은 느낌
겹치지않는데 겹친다.