malloc-lab을 처음 접했을 때 보면 도움되는 영상이다.
사용할만한 함수가 어떤것이 있는지, 우리가 구현해야 되는 함수가 무엇인지, 디버깅을 어떻게 하는지, 테스트 케이스는 어떻게 이루어졌는지 설명해 주신다. 점수 채점에 대한 방법도 알려주신다.
extern int mm_init (void);
extern void *mm_malloc (size_t size);
extern void mm_free (void *ptr);
extern void *mm_realloc(void *ptr, size_t size);
void mem_init(void);
void mem_deinit(void);
void *mem_sbrk(int incr);
void mem_reset_brk(void);
void *mem_heap_lo(void); //heap의 제일 낮은 address반환
void *mem_heap_hi(void); //heap의 제일 높은 address반환
size_t mem_heapsize(void);
size_t mem_pagesize(void);
make clean : 목적파일 삭제
make mdriver : 실행파일 생성
./mdriver : 실행파일 삭제
cd traces
ls
출력내용:
Makefile binary-bal.rep cccp-bal.rep coalescing.rep expr.rep gen_random.pl random.rep realloc.rep short1.rep
README binary.rep cccp.rep cp-decl-bal.rep gen_binary.pl gen_realloc.pl random2-bal.rep realloc2-bal.rep short2-bal.rep
amptjp-bal.rep binary2-bal.rep checktrace.pl cp-decl.rep gen_binary2.pl gen_realloc2.pl random2.rep realloc2.rep short2.rep
amptjp.rep binary2.rep coalescing-bal.rep expr-bal.rep gen_coalescing.pl random-bal.rep realloc-bal.rep short1-bal.rep
.rep으로 쓰여있는 파일들이 test case 파일들이다.
vi realloc-bal.rep
을 사용해 realloc-bal.rep 파일을 예시로 확인해보면, 다음과 같은 테스트 케이스를 확인해 볼 수 있다.
100
4801
14401
1
a 0 512
a 1 128
r 0 640
a 2 128
f 1
r 0 768
a 3 128
f 2
r 0 896
a 4 128
f 3
r 0 1024
a 5 128
f 4
a는 할당, f는 free, r은 relloc에 대한 매개변수 테스트 내용이다. 편집기 종료는 :q 엔터
해당 테스트 케이스를 실행하려면 다음과 같은 명령어를 사용한다.
./mdriver -f traces/short1-bal.rep
결과창:
Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle
Perf index = 40 (util) + 40 (thru) = 80/100
좀 더 자세한 사항을 알고 싶다면 다음과 같은 명령어를 사용하자.
./mdriver -Vf traces/short1-bal.rep
결과창:
Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle
Measuring performance with gettimeofday().
Testing mm malloc
Reading tracefile: traces/short1-bal.rep
Checking mm_malloc for correctness, efficiency, and performance.
Results for mm malloc:
trace valid util ops secs Kops
0 yes 66% 12 0.000000 30000
Total 66% 12 0.000000 30000
Perf index = 40 (util) + 40 (thru) = 80/100
util은 공간에 대한 효율면 값, Kops(Killo operation seconds)와 thru 는 시간에 대한 효율면 값. 왜 이렇게 점수가 나오는지 알아야 한다.
모든 테스트에 대해 알고 싶으면 다음과같은 명령어를 사용한다.
./mdriver -V
다음과 같은 명령어로 gdb 디버거를 실행한다.
gdb --annotate=3 mdriver
(--Type <RET> for more, q to quit, c to continue without paging-- 안내가 나오면 c)
다음과 같은 명령어로 break 포인트를 설정한다.
break mm_malloc
break mm_free
break mm_realloc
결과창:
(gdb)
prompt
break mm_malloc
post-prompt
Breakpoint 1 at 0x2a30: file mm.c, line 73.
Breakpoint 2 at 0x2b60: mm_free. (3 locations)
Breakpoint 3 at 0x2c50: file mm.c, line 220.
다음과 같은 명령어로 테스트 파일을 실행한다.
run -f traces/short1-bal.rep
결과창:
post-prompt
Starting program: /home/jinkyo/jungle/week06/malloc-lab/mdriver -f traces/short1-bal.rep
starting
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle
breakpoint 1
Breakpoint 1,
frame-begin 0 0x56557a30
mm_malloc (size=2040) at mm.c:73
source /home/jinkyo/jungle/week06/malloc-lab/mm.c:73:1574:beg:0x56557a30
stopped
다음과 같은 명령어로 변수들을 확인할 수 있다.
p {변수명}
p {함수}
p size
p mem_heap_lo()
결과창:
post-prompt
$1 = 2040
(void *) 0x7ffff6be800f
다음 줄로 넘어가려면 n을 입력하면 된다.
n
이제 사용법을 알았으니, implicit free list부터 구현하러 가자.