mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-23 06:18:54 +00:00
42 lines
1.1 KiB
Markdown
42 lines
1.1 KiB
Markdown
# The Memory Manager
|
|
|
|
The manager will init it self if there is no blocks, the manager is model after a double LinkedList and not a List.
|
|
|
|
# Memory Layout
|
|
The layout has not preset list or table but rather every item has meta data linking the next and previous item this allows for a robust system.
|
|
|
|
The data layout looks as follow :
|
|
|
|
````
|
|
Block|Block|Block etc.
|
|
|
|
Block =
|
|
|
|
Meta Data|Data
|
|
|
|
Meta data =
|
|
4 bytes (preveus block address start)|4 bytes (next block address start)|4 bytes (curent[this] block size)| 4 bytes (curent[this] block flag)
|
|
```
|
|
BlockFlags :
|
|
|
|
```
|
|
Allocated = 0,
|
|
Free = 1,
|
|
```
|
|
|
|
the final layout looks like this:
|
|
|
|
```
|
|
4 bytes|4 bytes|4 bytes|4 bytes | (size of Block) bytes | 4 bytes|4 bytes|4 bytes | 4 bytes | (size of Block) bytes | etc
|
|
|
|
```
|
|
Note:
|
|
this means the smallest size an Block can occupy is 17 bytes, 16 bytes for the header and 1 for the smallest data type a byte.
|
|
|
|
# How this system is used.
|
|
|
|
### Allocation
|
|
Adding an Block is easy, you simply find the first free block using compare exchange and split it.
|
|
|
|
## Deallocation (free)
|
|
Freeing a block is easy set its flag(in meta data) to Free
|