WIL/스터디

Malloc Lab

아크리미츠 2024. 8. 25. 16:29

Malloc

malloc은 지정된 크기만큼의 메모리를 할당하고 할당된 메모리의 시작주소를 반환한다.

이 때, 할당된 메모리는 초기화되지 않기 때문에 그 위치에 저장된 값들이 남아 있을 수 있다.

 

Calloc

calloc은 malloc과 같이 메모리를 할당해주지만, 할당된 메모리의 값을 모두 0으로 초기화한다.

 

Implicit Malloc (암시적)

프로그래머가 직접 메모리 할당을 지시하지 않아도 컴파일러 혹은 런타임이 자동으로 메모리를 할당하는 경우. 보통 가비지 컬렉션이 있는 언어인 Java나 Python에서 객체를 생성할 때 명시적으로 메모리 할당을 하지 않아도 된다. 내부 단편화가 발생할 수 있고 속도가 상대적으로 느리다.

 

Explicit Malloc (명시적)

프로그래머가 직접 메모리 할당을 지시하고, 할당된 메모리의 관리를 수행하는 경우. 이 경우 free를 통해 메모리를 해제해야 한다. 높은 제어권을 제공하고, 프로그래머가 메모리 관리를 최적화할 수 있다. 대신 메모리 관리가 복잡해지기 때문에 메모리 누수와 같은 버그의 가능성이 높아진다.

Segregated Free List (분리된 자유 리스트)

서로 다른 크기의 메모리 블록을 별도의 리스트를 만들어 관리하는 메모리 할당 전략이다. 크기가 유사한 블록끼리 같은 리스트에 저장하기 때문에 메모리 할당 시 적절한 크기의 블록을 빠르게 찾을 수 있다. 암시적 메모리 할당보다는 내부 단편화가 줄어든다. 또한 할당 및 해제 속도가 매우 빠르다. 그러나 크기별로 여러 리스트를 유지해야 하므로 메모리 오버헤드가 발생한다.

Buddy System

메모리를 2의 거듭제곱 크기로 분할하여 관리하는 메모리 할당 방법. 큰 메모리 블록을 요청된 크기에 맞게 작은 블록으로 반복적으로 나누어 할당하며, 필요할 경우 인접한 블록을 다시 결합해 큰 블록으로 사용한다. 메모리를 비효율적으로 사용하기 때문에 외부 단편화가 발생한다.

 

내부 단편화

메모리 할당 시, 할당된 메모리 블록 내에서 실제로 사용되지 않는 여유 공간이 발생하는 현상. 패딩이 많아진다고 생각하면 편하다.

외부 단편화

메모리의 여러 자유 블록이 존재하지만, 이 블록들이 비연속적으로 흩어져 있어서 필요한 크기의 메모리 블록을 할당할 수 없는 현상. 디스크 정리가 필요한 상태라고 생각하면 편하다.

 

+ 속도 면에서 내부 단편화가 많은게 좋을까 외부 단편화가 많은게 좋을까

내부 단편화가 있는 메모리 관리 방식이 일반적으로 더 빠를 것이다. 내부 단편화에서는 메모리 블록의 크기가 고정되어 있으므로, 블록을 할당하고 해제하는 작업이 더 간단하고 빠르게 수행될 수 있다. 반면, 외부 단편화는 메모리 할당 시 적절한 크기의 연속된 메모리 공간을 찾는 데 시간이 더 걸릴 수 있다.

 

+ Malloc Lab을 진행하며 느낀점

find fit 알고리즘을 만드는 과정에서 first fit 속도는 빠르지만 내부 단편화가 많이 발생하고 best fit 내부 단편화를 최소화 해주지만 속도가 많이 느렸다. 그에 따라서 malloc lab 내부의 채점 시스템에서 점수가 잘 안나왔다. 이것을 극복하기 위해 first fit과 best fit을 합쳐서 어떠한 알고리즘을 제작했는데, 이 알고리즘을 만드느라 시간을 너무 많이 사용했다. 그래서 Buddy System을 구현하지 못했는 데, 이게 아쉽다.

'WIL > 스터디' 카테고리의 다른 글

인터넷 지식  (1) 2024.08.27
Thread & Process  (0) 2024.08.25
Virtual Memory  (0) 2024.08.23
Pintos Extra Questions  (0) 2024.08.22
Red-Black Tree Extra Questions  (0) 2024.08.21