private void AllocateSlab()
{
var slab = MemoryPoolSlab2.Create(_slabLength);
_slabs.Push(slab);
var basePtr = slab.ArrayPtr;
var firstOffset = (int)((_blockStride - 1) - ((ulong)(basePtr + _blockStride - 1) % _blockStride));
for (var offset = firstOffset;
offset + _blockLength <= _slabLength;
offset += _blockStride)
{
var block = MemoryPoolBlock2.Create(
new ArraySegment<byte>(slab.Array, offset, _blockLength),
basePtr,
this,
slab);
Return(block);
}
}