- http://csapp.cs.cmu.edu/3e/malloclab.pdf
- 출처: CMU (카네기멜론)
말록랩은 '동적 메모리 할당' 방법을 직접 개발하면서 메모리, 포인터 개념에 익숙해질 수 있는 과제다. 랩 코드를 직접 수정하고, 채점 프로그램을 실행하면서 '내 점수'를 알 수 있다.
즉, malloc()함수와 free()함수를 직접 만드는 것이라고 생각하면 된다.
먼저, implicit 방법으로 구현해 볼 예정인데 이는 컴퓨터시스템 9.9장에 나와 있다.
그 후 explicit 방법과 segreagted free 방법에 대해서 고민해볼 예정이다.
가장 큰 이유는, 프로그램을 실행시키기 전에 자료 구조의 크기를 알 수 없는 경우들이 있기 때문이다.
미리 어떤 배열의 크기의 값을 정적으로 정의하고 시작해도 되나, 실제 필요한 크기를 몰라 문제가 생기는 것이다. 그 값이 커도 문제고 작아도 문제다. 필요한 크기보다 작은 값을 정의하고 시작하면, 값을 늘려 다시 컴파일 해야한다. 큰 값을 정의하고 시작하면 메모리 낭비가 되기 때문이다.
두 방법의 차이는 아래 사진을 보면 된다.
단편화는 RAM에서 메모리의 공간이 작은 조각으로 나뉘어져, 사용 가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 말한다.
단편화에는 내부단편화와 외부단편화가 있다.
1. 내부 단편화(Internal Fragmentation)
아래 그림과 같이, 할당된 블럭 안에 낭비되고 있는 부분이 있다. 이 부분들 때문에 새로운 메모리 할당이 불가한 경우를 내부단편화라고 한다.
출처(https://sycho-lego.tistory.com/m/9)
2. 외부 단편화(External Fragmentation)
외부단편화는 아래 그림과 같이, 메모리 조각들을 합치면 새로운 메모리 할당이 가능하지만 연속적인 공간이 아니라서 메모리를 할당할 수 없을 때를 부른다.
출처(https://sycho-lego.tistory.com/m/9)
단편화 문제들을 해결할 수 있는 방법은 다음에 알아보자.(꼭!)
ㅋㅋㅋㅋㅋ 귀여워 알아보자 ! 꼭 !