This repository contains my solution to the Malloc Lab assignment from the course Systems Programming and Computer Architecture at ETH Zurich. My implementation can be found in mm.c.
The allocator uses an implicit free list with 8-byte alignment, headers and footers to track block size and allocation status, first-fit search, block splitting on allocation and coalescing on free. When no suitable free block is found, the heap is extended and merged with the last block if possible. This keeps fragmentation low while keeping the implementation simple and fully compliant with the Malloc Lab interface.
Below you can find the original handout specification. I have also included the original mm.c file which you can find in mm_old.c.
#####################################################################
CS:APP Malloc Lab Handout files for students
Copyright (c) 2002, R. Bryant and D. O'Hallaron, All rights reserved. May not be used, modified, or copied without permission.
######################################################################
Main Files:
mm.{c,h} Your solution malloc package. mm.c is the file that you will be handing in, and is the only file you should modify.
mdriver.c The malloc driver that tests your mm.c file
short{1,2}-bal.rep Two tiny tracefiles to help you get started.
Makefile Builds the driver
Other support files for the driver
config.h Configures the malloc lab driver fsecs.{c,h} Wrapper function for the different timer packages clock.{c,h} Routines for accessing the Pentium and Alpha cycle counters fcyc.{c,h} Timer functions based on cycle counters ftimer.{c,h} Timer functions based on interval timers and gettimeofday() memlib.{c,h} Models the heap and sbrk function
Building and running the driver
To build the driver, type "make" to the shell.
To run the driver on a tiny test trace:
unix> mdriver -V -f short1-bal.rep
The -V option prints out helpful tracing and summary information.
To get a list of the driver flags:
unix> mdriver -h