# Homework 12 - 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_-allocators
## 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)