We already handle the no-slabs case when checking whether the current slab is large enough: if no slabs have been allocated, CurPtr and End are both 0. alignPtr(0), will still be 0, and so "if (Ptr + Size <= End)" fails.
I measured a 1.5% speed-up with "perf stat -r10 clang -fsyntax-only -w gcc.c".
The thing I'd like review for is whether "Ptr + Size <= End" is strictly correct. It seems to me that Ptr + Size would often point outside the slab object (especially now when Ptr can be 0), and that comparing that with End would be undefined behaviour. Perhaps we should really be using intptr_t here?