본문 바로가기

프로그래밍/C++

메모리 단편화

메모리 단편화 (Memory Fragmentation)

 : RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태

 

단편화가 생기는 이유

 

1. 내부 단편화(Internal Fragmentation)

 : 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는

  메모리 공간이 낭비되는 상황

 

ex)

 메모장을 켰는데 OS가 4kb를 할당해주었다. 그런데 사실 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받아서 3kb만큼 내부 단편화가 생긴다.

 

 

2. 외부 단편화(External Fragmentation)

 : 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 되는데,

  이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로

  할당할 수 없는 상황이다.

 

ex)

메모리 첫 주소에 8mb만큼 프로세스가 할당되고 이어서 다음 프로세스가 16mb만큼 할당되었을 때, 첫 프로세스를 종료시키면 메모리의 처음 주소부터 8mb만큼의 공간이 생긴다.

 

메모리 단편화 해결 방법

 

1. 페이징(Paging) 기법

 : 가상 메모리를 같은 크기의 블록으로 나눈 것. 연속적이지 않은 공간도 활용할 수 있다.

  페이지 단위를 작게하면 내부 단편화 문제도 해결할 수 있지만 대신 page mapping 과정이 많아지므로

  오히려 효율이 떨어질 수 있다.

 

2. 세그멘테이션(Segmentation) 기법

 : 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리

  주소로 변환하는 것. 연속적인 공간에 저장되어 있다.

  크기가 다르기 때문에 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법이다.

 

3. 메모리 풀 (Memory Pool)

 : 필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다

  사용하고 반납하는 기법

 

'프로그래밍 > C++' 카테고리의 다른 글

lib와 dll 라이브러리(library)  (1) 2021.01.04
객체지향 개발 5대 원리 : SOLID  (0) 2019.07.09
메모리 단편화  (0) 2019.07.08
LSB, MSB  (0) 2019.07.07
메모리의 구조  (0) 2019.07.06