본문 바로가기

개발정보

힙 메모리 단편화

메모리 단편화? 

내부 단편화와 외부 단편화로 나뉜다. 

 

내부 단편화 

프로세스에서 필요로 하는 메모리의 양보다 더 많이 할당된 것을 말한다. 

20mb만 필요한 메모리가 30mb가 할당된다면 10mb의 내부 단편화가 발생한다. 

 

외부 단편화 

메모리를 할당하고 난 다음에 작은 크기의 조각들이 남아서 사용할 수 없는 

공간이 많아지는 것을 말한다. 

 

해결방법으론 크게 3가지가 있다. 

1. 페이징 

2. 세그멘테이션

3. 메모리 풀

 

페이징 ?

가상 메모리를 사용한다. 

 

사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 방법.

페이징 기법을 사용하면 외부 단편화 문제는 해결할 수 있지만 페이지 단위를 작게 하지 않는 

이상 내부 단편화는 해결하지 못한다

 

※ 페이지 ?

보조기억장치를 이용한 가상 메모리를 같은 크기의 블록으로 나눈 것

 

※ 프레임 ? 

RAM을 페이지와 같은 크기로 나눈 것

 

세그멘테이션 ?

가상 메모리를 사용한다. 

 

페이징에서 같은 크기로 가상 메모리를 분할했다면, 이번에는 크기가 다른 단위로 메모리를 

분할해서 할당하는 방식이다. 

 

필요한 만큼 할당하기 때문에 내부 단편화는 발생하지 않지만 중간 프로세스를 해제하면 

나타나는 영역에 외부 단편화는 여전히 발생하게 된다. 

 

메모리 풀 ? 

가상 메모리를 사용한다. 

 

필요한 메모리 공간을 필요한 크기, 개수만큼 사용자가 직접 지정해서 할당받아 필요할 때마다 

사용하고 반납하는 기법이다. 

 

필요한 만큼 할당하기 때문에 내부 단편화는 발생하지 않으며, 미리 공간을 할당하고 사용해서 

외부 단편화 또한 발생하지 않는다. 

 

하지만 미리 메모리에 할당해서 사용하지 않는 순간에도 메모리 자체에는 할당이 되어 있어 

메모리 누수가 발생할 수 있다.  

반응형

'개발정보' 카테고리의 다른 글

Git Flow  (1) 2022.09.24
메모리  (1) 2022.09.17
Github 동작 원리  (0) 2022.09.14
웹소켓  (0) 2022.06.06
Side Effect  (1) 2022.05.16