SWjungle/#malloc 5

[malloc] budy메모리 할당

budy system 📌개념 큰 버퍼들을 반복적으로 2등분하여, 작은 버퍼들을 만들며, 가능할때마다 인접한 메모리를 합치는 과정을 반복하는 기법 📌버디 메모리 할당 특징 2의 멱승 : 메모리의 할당과 회수를 2의 멱승 단위로 수행 합병 : 서로 인접한 버디들이 손쉽게 큰 세그먼트로 병합 📌버디 시스템 원리 메모리를 1/2로 계속 나누어 요청한 메모리보다 큰 메모리를 할당한다. 예를들어 31를 요청했다면 256을 3번나누어 32룰 할당 31의 메모리를 회수할 경우 인접한 32와 합치고 다시 64kb, 128kb를 합쳐서 원래의 256kb로 만든다. 📌버디 메모리 할당 예제 💡1024k의 메모리에서 요청시 동작하는 과정 1) 프로그램 A가 64K 크기의 메모리를 요청 -> A 할당 2) 프로그램 B가 128..

SWjungle/#malloc 2023.09.14

[malloc] segregated free list 방식 - 구현

segregated free list seg-list 방법은 free 블록들을 사이즈 에 대해 리스트를 각각 마련하는 방식이다. 서로다른 size 값이 n개라면, n개의 가용 리스트를 두어 각 가용 블럭들을 분류해서 기억하는 것이다. 사이즈 별로 연결리스트를 만들어야 하기 때문에 여러개의 연결리스트가 필요하며 여러개의 연결리스트 포인터가 존재한다.(힙에저장) 예를들어 37만큼의 메모리를 할당하고자 하면 위 그림에서 32~64 사이즈 연결리스트를 선택하게 되고 연결리스트에서 적절한 free블록을 찾게 된다. 위와 같이 대부분의 seg-list에서 연결리스트 사이즈는 2의 제곱수를 기준으로 한다. 해당 연결리스트에서 적절한 사이즈의 블록을 찾지 못하면, 다음 크기의 연결리스트로 넘어서 찾게된다. 이렇게 연결..

SWjungle/#malloc 2023.09.13

[malloc] Explicit Free List 방식 - 구현

Explicit Free List implicit free list가 모든 블록(할당 + free)을 탐색하며 해당 블록이 할당되었는지, 아니면 free인지 확인하며 필요한 동작을 수행했다면, explicit free list는 오직 free 블록만 탐색하게 된다. 이러한 free 블록을 탐색할 수 있도록 이중 연결 리스트로 구성되는데, 이를 통해서 앞으로만 탐색하는 것이 아니라 뒤로도 탐색하는 것이 가능해진다. free 블록의 payload 부분은 사용하지 않는 상태로 되기 때문에 이 공간을 활용한다. 해당 블록에, 전의 free 블록의 주소로 갈 수 있는(주소값을 담고 있는) predecessor과 뒤의 free 블록의 주소로 갈 수 있는(주소값을 담고 있는) successor를 넣게 된다. 이를 통..

SWjungle/#malloc 2023.09.12

[Malloc] Implicit Free List방식-구현

Malloc - lab 📌heap 동적 메모리 할당기는 힙이라는 가상 메모리를 관리한다. 이러한 힙 영역에는 할당된 블록과 가용블록이 있다. 할당기의 종류 명시적 할당기(explicit allocator) : 메모리 할당과 해제를 직접적으로 관리하고 조작하는 할당기 단점 : 메모리 누수 , 무효 표인터(이전에 참조하던 메모리 위치를 가리키지만 이제는 무효화된 포인터를 나타냄) 암시적 할당기(implicit allocator) : 프로그래밍 언어 또는 런타임 라이브러리에 내장되어 있어서 개발자가 명시적으로 메모리 할당 및 해제를 관리하지 않아도 되는 메모리 할당 방식 단점 : 런타임 오버헤드 문제, 성능 문제 Malloc pacakge 📌malloc void *malloc(size_t size) 할당 성공..

SWjungle/#malloc 2023.09.11

[malloc] 동적 메모리 할당

📌동적 메모리 할당 컴퓨터 프로그래밍에서 실행 중에 사용할 메모리 공간을 할당하는 것을 의미 정적 할당 : 컴파일시점에 소스 코드를 읽고 메모리 공간을 확보하는 것 동적 할당 : 컴파일 시점이 아닌 프로그램이 실행되는 중인 런타임에 필요한 만큼의 메모리 공간을 확보하는 것을 의미한다. 💡동적할당을 하는 이유? char name [100]; name 배열은 최대 100개 까지 저장이 가능할 것이다. 그런데 막상 프로그램을 실행 시켜서 10글자만 입력했다. 그렇다면 90바이트는 어떻게 될? 그냥 낭비가 되는것이다. 반대로 100글자를 저장할 수 있는데 110글자를 입력하려고 한다. 이것 또한 문제이다. 위와 같은 문제를 해결해주는 것이 바로 동적 메모리 할당이다. 동적으로 할당한다는 말은, 프로그램이 시작된..

SWjungle/#malloc 2023.09.08