Recently I encountered the following problem.
I need a simple stack of uint.
I want to push uints back and pop it. I don't want to copy this stack and I want it to work fast.

In a first approximation, the problem seems easy.

uint[] my_stack;
my_stack.reserve(256);

my_stack ~= 1; //push
uint head = my_stack[$ - 1]; //top
my_stack.length--; //pop
my_stack ~= 2; //push

However, when I changes the length and append new elem to the array after it, array is reallocated.

Ok, good point. Seems reasonable. I might create slice of array copy before changing of the length. And by default changing array length or creating slice should cause an array reallocation at appending.

However I don't plan to copy or creating slices of this array, thus I need to some magic for avoid reallocation.

I've found a GC.BlkAttr.APPENDABLE flag at core.memory.

How ever it hasn't helped me.
Is there another way to do it without manually managing of memory?

Reply via email to