가상메모리 3

[TIL] 5주차 - (4) : realloc() 함수 개선

오늘은 realloc() 함수를 개선해 보겠다. realloc 함수 문제 인식 현재 realloc() 코드를 보자. void *mm_realloc(void *ptr, size_t size) { void *oldptr = ptr; void *newptr; size_t copySize; newptr = mm_malloc(size); if (newptr == NULL) return NULL; copySize = *(size_t *)((char *)oldptr - SIZE_T_SIZE); if (size < copySize) copySize = size; memcpy(newptr, oldptr, copySize); mm_free(oldptr); return newptr; } 현재 코드는 무조건 할당되어 있는 p..

Jungle 2023.11.11

[TIL] 5주차 - (3) : 동적 메모리 할당 기법 개선하기

이번 포스팅에는 지난 (2) 의 코드를 개선할 방안을 나열한 뒤 각각 구현한 코드를 실행해 보고 해당 결과를 확인해보겠다. 교재 코드의 할당 구동 절차 1. init()으로 런타임 heap의 틀을 구색 2. 처음에 크기가 큰 heap을 할당 (CHUNKSIZE heap) 3. 할당과 반환 작업 4. 3번 진행 중에 크기에 맞는 가용 블럭이 없다면 2번 순서에서 진행한 heap을 재 할당 개선 방안 제시 1. first fit으로 가용블럭을 탐색하고 있는 코드현재 코드는 first-fit으로 가용 블럭을 탐색하고 있다. 이 경우 heap의 초반부에 작은 블럭들이 편향되는 단점이 있으므로 next-fit과 best-fit으로 탐색하는 코드도 테스트 해 볼수 있다. 2. 즉시연결 (free 하자마자 연결탐색)..

Jungle 2023.11.10

[TIL] 5주차 - (2) : C 동적 메모리 할당 코드 분석 및 구동 방식 파악

오늘은 malloc() 함수를 실제 구현해 보는 과정을 진행하기 위한 초석이다. 더 성능 좋은 malloc으로 구현하기 위해 책에 구현된 코드의 define 문과 함수를 전부 분석하고, 책의 어떤 방식을 채택하여 구현되어 있는지 확인해본 뒤 어떻게 개선할 수 있을지 여부를 판단하겠다. CS:APP 9.9 코드 예제 해석 먼저 코드의 내부 시스템 코드인 memlib.c 와 Define 문으로 정의된 코드부터 파악해보자 - memlib.c 해당 파일은 시스템 자원인 heap의 시작 pointer , heap이 현재까지 할당된 end pointer , heap의 최대 끝 end pointer를 기억하고 있다. 해당 데이터는 각각 mem_heap , mem_brk , mem_max_addr에 저장되어 있고, 해..

Jungle 2023.11.10