(project concept thanks to Dr. Misurda.)

In this project, you will be implementing a memory allocator. You’ll be making your own versions of the malloc and free functions! Yay! Fun!


Materials

You are given the following source files to begin with. Right click and download these files. Read the comments inside them thoroughly before getting started.

mymalloc.c is where you’ll be writing all your code for this project.

The mydriver.c file contains a main function for you to expand upon. By default it just allocates and frees a single block of memory. As you work on your allocator, you can add more testing code to this driver program to make sure it works.

Makefile is a makefile to make your driver, and eventually, other test file(s) that I give you.

The bigdriver.c file is a driver I made to test your allocator more thoroughly. READ THE COMMENTS INSIDE IT THOROUGHLY TO HELP DEBUG ANY ISSUES THAT COME UP.

Although bigdriver.c does a lot of tests, it might not catch all bugs. Look at it closely and add tests if you think it’s not thorough enough. You can change it and submit it along with your mydriver.c.


Building and running

To build everything, use the following command line:

make mydriver

Ignoring warnings in this project would be a very, very bad idea. The Makefile uses -Wall -Werror. Do not remove these. Fix all the warnings. SERIOUSLY.

Then, you should be able to:

./mydriver

You can do the same with bigdriver:

make bigdriver
./bigdriver

Your Task

You will write my_malloc and my_free which implement a simple memory allocator using a linked list and a worst-fit allocation scheme. The performance won’t be great, but hey, it’s a class project, not a AAA game engine.

Your my_malloc function will:

Your my_free function will:

Click here for details on what you have to do.


Requirements and Grading

Basics [30]

Allocation [40]

Deallocation [30]


Submission

Follow this checklist:

  1. Run make clean to remove any executables.
  2. Include the following files in your proj2 directory:
    • mymalloc.h
    • mymalloc.c
    • mydriver.c
    • Makefile
    • bigdriver.c
  3. Did you make a copy of that directory just in case?
  4. Did you put your full name and username at the top of each file in comments?
  5. DID YOU TAR THE DIRECTORY AND NOT JUST THE EXECUTABLE??? AGAIN????????

Name your file username_proj2.tar.gz like jfb42_proj2.tar.gz.

Now you can submit using the same directions as lab1.