mirror of
https://github.com/Noratrieb/vechonk.git
synced 2026-01-14 16:45:10 +01:00
layout
This commit is contained in:
parent
c107680b95
commit
0764c02fa5
2 changed files with 68 additions and 3 deletions
28
README.md
Normal file
28
README.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
A `Vec<T: ?Sized>`
|
||||
|
||||
It's implemented by laying out the elements in memory contiguously like `alloc::vec::Vec`
|
||||
|
||||
# Layout
|
||||
|
||||
A `Vechonk` is 3 `usize` long. It owns a single allocation, containing the elements and the metadata.
|
||||
The elements are laid out contiguously from the front, while the metadata is laid out contiguously from the back.
|
||||
Both grow towards the center until they meet and get realloced to separate them again.
|
||||
|
||||
```txt
|
||||
Vechonk<str>
|
||||
------------------------
|
||||
| ptr | len | cap |
|
||||
---|---------------------
|
||||
|
|
||||
|___
|
||||
|
|
||||
Heap v
|
||||
------------------------------------------------------------------------
|
||||
| "hello" | "uwu" | <uninit> | 0 - 5 | 5 - 3 |
|
||||
|-----------|----------|-----------------|--------------|--------------|
|
||||
| dynamic | dynamic | rest of alloc | usize + meta | usize + meta |
|
||||
--------------------------------------------|--------------|------------
|
||||
^ ^ | |
|
||||
|___________ | _________________________| |
|
||||
|_________________________________________|
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue