Issue #8 new

ScratchAllocator::deallocate() runs into endless loop if buffer is used up exactly to the end

Johannes Spohr
created an issue

If the internal buffer is filled with allocations exactly to the end, so that _allocate == _end, the loop in memory.cpp, line 192 never returns, because _free will never reach _allocate.

Proposed solution: add a check in allocate(), just before assigning to _allocate:

...
  if (p == _end)
    p = _begin;
  _allocate = p;
  return data;
}

BTW: I think the loop in deallocate() does a load-hit-store on _free, so perhaps using a local variable would improve performance if there are a lot of small allocations in the default scratch allocator.

Comments (0)

  1. Log in to comment