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.

Reply via email to