Computer Science

[운영체제] 동적 메모리 할당 문제, 메모리 단편화와 단편화 방식이 가지는 문제점

imsunbow 2024. 1. 19. 15:34

메모리 할당으로는 고정 분할 방식(메모리를 몇 개의 고정 크기 영역으로 분할하는 방법)과 가변분할방식(가변 길이 및 개수를 가지는 분할)이 있다. 

 

가변 메모리 할당 (Dynamic Memory Allocation): 이는 프로그램 실행 중에 필요한 메모리 양을 동적으로 할당하고 해제하는 방식이다. C/C++에서 malloc, free, new, delete와 같은 함수 또는 연산자를 사용하여 동적으로 메모리를 할당하고 해제할 수 있다.

int *dynamicArray = (int *)malloc(5 * sizeof(int)); // 동적으로 배열 할당
// ...
free(dynamicArray); // 할당된 메모리 해제

 

정적 메모리 할당 (Static Memory Allocation): 이는 컴파일 시간에 메모리가 할당되고 프로그램 실행 중에 크기가 변경되지 않는 방식이다. 정적으로 할당된 메모리는 프로그램의 전역 변수 또는 정적 변수로 사용된다

int staticArray[5]; // 정적으로 배열 할당

 

일반적으로 동적 메모리 할당은 런타임 중에 메모리의 크기가 동적으로 변해야 할 때 사용되며, 이는 가변 메모리 할당의 예이다. 그러나 정적 할당에서도 동적 메모리 할당을 사용할 수 다. 예를 들어, 동적으로 할당된 메모리의 주소를 정적 변수에 저장하거나 함수에서 반환할 수 있다.

 

 
[동적메모리 할당 문제]
 
free hole의 리스트에서 크기 n의 메모리를 요청하였다고 가정해보자.
 
 
- First-fit
 
요청을 수용할 수 있는 first hole을 할당한다. 검색 시작 위치는 리스트의 시작이 된다.
 
- Best -fit
 
요청을 수용할 수 있는 가장 작은 hole을 할당한다. 리스트가 크기 순서로 정렬되어 있지 않으면 전체 리스트를 검색해야 한다. 실행 결과로 가장 작은 크기의 남은 hole이 생성된다.
 
-Worst-fit
 
요청을 수용할 수 있는 가장 큰 hole을 할당한다. 이 경우 전체 리스트를 검색해야 한다.
 

 
메모리 단편화란, 사용할 수 없는 작은 메모리 영역을 의미한다. 메모리 단편화의 종류로는 외부 단편화와 내부 단편화가 있다.
 
외부 단편화는 요청한 크기보다 작은 메모리 블록들만 존재하여 전체 메모리 크기 합이 요청한 크기보다 큰 경우에도 요청한 크기의 메모리를 할당할 수 없는 경우를 의미한다.
 
외부 단편화에서는 N개의 블록이 할당되었다고 가정 시 first-fit 방식은 0.5N개의 블록이 외부 단편화로 사용될 수 없다. 이는 메모리의 1/3을 낭비하는 결과를 초래한다.
 
내부 단편화는 요청한 것보다 더 큰 메모리를 할당하여 할당한 메모리의 일부가 사용되지 않는다. 
 
내부 단편화에서는 할당된 메모리가 요청한 메모리보다 클 수 있는 문제가 발생한다. 이는 할당된 메모리의 일부 영역은 사용되지 않아 효율성 문제를 낳는다.
 

 

반응형