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

Issue #8 new
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