본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/컴퓨터 시스템

Malloc Lab - assignment

by 금의야행 2021. 9. 9.

목차

     

    개요

     

    직접 실제로 동작하는 나만의 malloc, free, realloc 함수 만들기

     

    사실상 메모리 관련 자료구조를 구현하는 실습. linked_list와 유사하다. 

     

     

     

    lab ( git 자료) 사용법.

     

    내가 수정 할 수 있는 파일은 오로지 mm.c 입니다.

     

    mdriver.c 는 내 mm.c 의 성능을 검증 해 볼 수 있는 도구 입니다.

     

    mdriver.c 사용법:

    1. make 로 driver code 생성
    2. ./mdriver -V 로 실행. (-V 는 유용한 정보들을 표시해줍니다.)

     

     

    완성해야 할 함수:

    1. int mm_init(void);
    2. void *mm_malloc(size_t size);
    3. void mm_free(void *ptr);
    4. void *mm_realloc(void *ptr, size_t size);

     

     

    1. mm_init

    mm_malloc, mm_free, mm_realloc 을 실행하기전 초기화해야하는 설정들을 넣습니다. 함수 실행 도중 문제가 생긴다면 -1, 정상적으로 종료되면 0을 return 합니다.

     

     

    2. mm_malloc

    size bytes의 공간을 할당한후 그 주소를 return 합니다. 

     

    이를 표준 C 라이브러리(libc)의 malloc과 비교합니다. libc가 연속된 8 bytes 메모리 주소를 반환한다면 우리의 malloc도 8 bytes 의 주소를 반환해야합니다.

     

     

    3. mm_free

    아무것도 return 하지 않습니다.

     

    이 함수는 인자로 받은 포인터가 이전에 malloc, realloc 으로 할당된 메모리이고, 그것이 free되지 않았을때만 실행되어야 합니다.

     

     

    4. mm_realloc

    추후 추가 예정.

     

     

     

     

    프로그래밍 규칙

     

    1. mm.c 의 인터페이스는 아무것도 바꾸면 안됩니다.
    2. 메모리 관리를 하는 라이브러리나, 내장 함수들을 사용하면 안됩니다. 
    3. 그 어떤 static 혹은 global 한 자료 구조 ( 배열, 구조체, 트리 등등) 을 정의하면 안됩니다. 하지만 전역 변수 (int, float, pointers 등등) 은 가능합니다.
    4. 채점은 libc malloc과 비교를 통해 진행되기에 libc 처럼 최대 8bytes의 메모리만 할당할 수 있습니다. 드라이버 프로그램이 이를 강제할 것입니다.

     

     

     

    평가 및 점수 산정 기준

     

    코드가 작동하지 않거나, 규칙을 깨거나, 드라이버와 충돌한다면 0점입니다. 그 이외에는 아래 기준을 가지고 산정합니다.

     

    1. 정확도 (20점)
    2. 성능 (35점)
    3. 스타일 (10점)
    4. heap consistency (5점)
    5. 좋은 프로그램 구조 및 주석 (5점)

    총 75점

     

     

     

     

    힌트

    mdriver -f 옵션을 사용하세요. tiny trace files 은 debuging 과 testing을 도와줄 것입니다. short1,2-bal.rep은 이를 위한 trace file 입니다.

     

    mdriver -v 와 -V 옵션을 사용하세요. -v 는 자세한 요약이 각 trace file 마다 제공되고, -V는 각 trace file 이 읽혔는지를 제공합니다.

     

    gcc -g 로 컴파일 후 디버거를 사용하세요. 

     

    강의 자료의 모든 줄을 이해하세요.

     

    추후 추가...

    댓글