On Friday, 19 August 2022 at 16:19:04 UTC, Gavin Ray wrote:
1. Calling `.toBytes()` on an `OutBuffer` will discard the
extra bytes allocated past what was reserved and used. But this
will still allocate the memory in the first place I guess (will
the compiler optimize this away?)
It does allocate when it needs to. It grows but never shrinks
again.
2. Copy the `OutBuffer` class into a new
`FixedSizeOutBuffer(T)` and alter its behavior
3. Use `ubyte[PAGE_SIZE]` and manually write like below:
```d
static ubyte[4] bytes = new ubyte[4];
```
Looks still unnecessary - you are allocating thread local memory.
Just use a static array.
```d
foreach (idx, ref slot; header.slots)
```
No need to reference `slot` here. You may prevent compiler
optimizations.
```d
// Skip over free space
ubyte[] padding = new ubyte[header.freeSpacePointer];
padding[] = 0;
buf ~= padding;
```
Unnecessary, the initial value of `ubyte` is 0 and allocation is
done automatically. Just set the slice length:
```d
buf.length += header.freeSpacePointer;
```
```d
foreach (idx, ref tuple; tuples)
```
Again, no need to reference
```d
move(buf.ptr, outbuf.ptr);
```
Not sure what that is. A simple
```d
outbuf[0 .. buf.length] = buf; // or whatever position to write
in outbuf
```
should do it too.