본문
메모리 단편화
# 메모리 단편화
프로그램을 할당하고 반납하는 과정이 반복되면서 사용하지 않고 남는 빈 공간 조각이 생기는 것. 이 공간들이 모여 큰 공간을 차지하게 되어 결국 메모리가 충분한데도 메모리 할당을 하지 못하는 현상이 발생하게 된다. 이를 "메모리 단편화"라고 한다.
=> 기억장치의 사용가능한 공간을 줄이거나, 읽기와 쓰기의 수행속도를 늦추는 문제점을 야기한다.
(1) 내부 단편화
: 메모리 처리 단위(분할된 영역)가 메모리를 요청한 프로그램 크기보다 커서
할당 요청한 메모리보다 더 많은 메모리가 할당되어 메모리가 낭비되는 현상.
(2) 외부 단편화
: 메모리 처리 단위(분할된 영역)가 메모리를 요청한 프로그램 크기보다 작기 때문에
프로그램이 할당될 수 없어 사용되지 않고, 빈 공간으로 남아있는 영역이 생기는 현상
: 메모리가 띄엄띄엄 할당되어 있어 요청한 메모리를 연속적으로 할당해줄 수 없는 현상
# 단편화 해결 방법
단편화된 공간을 모아서 사용할 수 있는 공간으로 만드는 기법
(1) 통합(Coalescing) 기법
: 인접해 있는 단편화된 공간을 하나로 통합하는 기법
(2) 압축(Compaction) 기법
: 떨어져있는 여러 개의 낭비 공간을 모아 하나의 큰 기억 공간으로 만드는 기법으로 할당된 영역을 한쪽으로 밀어버린다. (디스트조각모음)
(3) 메모리 풀링
: 할당되는 개체와 같은 크기의 여유공간의 리스트를 만들어두고 할당과 해제를 이 리스트에서 처리하는 방식.
할당하는 메모리 블록이 개체 크기와 딱 맞기 때문에 내부, 외부 단편화를 걱정할 필요 없다.
다만 다양한 크기의 풀링을 지원하는 것은 구현하는 비용이 높기때문에 애플리케이션 내에서 빈번하게 사용하는 개체에 한해서
간단하게 구현하는 편이 일반적이다
댓글