How to implement malloc/free

Here’s a malloc/free implementation in few lines of code. It maps malloc/free 1-to-1 with mmap/munmap. To do so, it rounds up all desired sizes to the nearest page size. This is pretty wasteful, but saves on implementation complexity.

#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>

int div_roundup(int a, int b) {
  return (a+b-1)/b;
}

void * jim_malloc(size_t size) {
  int pagesize = getpagesize();
  size_t required = size + sizeof(size_t);
  int num_pages = div_roundup(required, pagesize);
  void * new_region = mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, 0, 0);
  if (new_region == MAP_FAILED) return NULL;
  *(size_t*)new_region = required; // We use this to free() the right number of bytes
  return new_region+sizeof(size_t);
}

void jim_free(void * ptr) {
  void* region = ptr-sizeof(size_t);
  if (munmap(region, *(size_t*)region) != 0) {
    perror("Could not munmap");
  }
}
I just released Vidrio, a free app for macOS and Windows to make your screen-sharing awesomely holographic. Vidrio shows your webcam video on your screen, just like a mirror. Then you just share or record your screen with Zoom, QuickTime, or any other app. Vidrio makes your presentations effortlessly engaging, showing your gestures, gazes, and expressions. #1 on Product Hunt. Available for macOS and Windows.

With Vidrio

With generic competitor

More by Jim

Tagged . All content copyright James Fisher 2017. This post is not associated with my employer. Found an error? Edit this page.