(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 next-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]

Extra Credit [20] - that’s 2% of your final grade

While next-fit works, it’s still worst-case linear time to find a block. You can do better by using a more advanced data structure to store the free blocks. It’s up to you to choose what data structure to use - just as long as it results in better than linear time for allocation.


Submission

Follow this checklist:

  1. Run make clean to remove any executables.
  2. Include the following files in your proj3 directory:
    • mymalloc.h
    • mymalloc.c
    • mydriver.c
    • Makefile
    • bigdriver.c
    • a README.txt text file which contains any notes that might be helpful to the grader
      • such as: is anything not working? did you do any extra credit? etc.
  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?

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

Now you can submit using the same directions as lab1.