과제 개요

참고

CS:APP Textbook Ch 9.9

https://velog.io/@emplam27/CS-그림으로-알아보는-메모리-동적할당-Implicit-Explicit-Segregated-list-Allocator

들어가기에 앞서 중요한 pointer typecast!

<aside> 💡 char* p 타입의 포인터를 이용하면 해당 주소에서 데이터를 1byte씩 읽어오는게 가능함. int* p 타입의 포인터였다면 +1 할 시 +4 byte가 됨 p에 1을 더하면 주소 값이 1 증가되는게 아니라 p가 가리키는 타입의 크기만큼 증가

</aside>

<aside> 💡 포인터를 다른 자료형으로 변환하면서 역참조 할려면 괄호 ( ) 앞에 역참조 연산자 * 붙이면 됨 ⇒ *(자료형 *) 포인터

void 포인터는 자료형이 정해져 있지 않아서 역참조를 하고싶으면 형변환을 먼저 해야됨

</aside>

동적 메모리 할당

C 프로그래머들은 대게 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때 동적 메모리 할당함. 실제 실행전 까지는 자료의 크기를 알 수 없을때가 많기 때문

할당기는 힙을 다양한 크기의 블록들의 집합으로 관리한다. (Explicit) 명시적 할당기는 명시적으로 할당된 블록을 반환해 줄것을 요구 (Implicit) 묵시적 할당기는 할당기가 알아서 검출할 수 있을 것을 요구, garbage collector라고 불림...

32비트 모드 (gcc -m32)에서는 malloc은 주소가 항상 8의 배수인 블록을 리턴, 64비트에선 16배수

워드는 4byte객체

단편화 (Fragmentation)

내부 단편화 - 필요한 양보다 더 큰 메모리가 할당되어서 외부 단편화 - 할당 해제 작업 반복으로 작은 메모리가 중간중간 생겨나서 외부 단편화는 측정하고 예측하기 어렵기 때문에 할당기들은 많은 수의 작은 가용 블록들 보다는 더 적은 수의 더 큰 가용 블록들을 유지할려함.