---
# System prepended metadata

title: Homework 14 - Memory Allocators

---

# Homework 14 - Memory Allocators

## Läxa
Implementera **två olika** allocators i valfritt system programmeringsspråk (C, C++, Rust, Zig etc). Rust recomenderas inte och är det mest krångliga att bygga memory allocators i. De är och experimental förutom GlobalAlloc.

Pusha er kod till ett repo i ++organisationen på github med namnet _kth-id_-allocator

## Exempel på allocators
- Arena allocator
- Pool allocator
- Free list
- Pool allocator
- Buddy allocator
- En ny aldrig tidigare använd allocator?!

## Exempel på allocator interface i C
```c
void* alloc(size_t size, size_t alignment) {
    ...
}

// Kan inkludera size som parameter också
void free(void* ptr) {
    ...
}

// Kan inkludera old_size som parameter också
void* resize(void* ptr, size_t new_size) {
    ...
}
```

## Resusrer
- [Veckans Sildes](https://docs.google.com/presentation/d/1XZG0NpbPpQAj3x7S5tXdzTpNdcaVEYnowVgSA3Apb18/edit?usp=sharing)
- Slab Allocator
    - [Kernel.org](https://www.kernel.org/doc/gorman/html/understand/understand011.html)
    - [Allocators in the linux kernel](https://hammertux.github.io/slab-allocator)
- Buddy allocator
    - [Wikipedia](https://en.wikipedia.org/wiki/Buddy_memory_allocation)
    - [KTH](https://people.kth.se/~johanmon/ose/assignments/buddy.pdf)
- [Rust allocators](https://doc.rust-lang.org/std/alloc/trait.Allocator.html)
- [Custom rust allocators](https://doc.rust-lang.org/1.9.0/book/custom-allocators.html)