in dispenso/concurrent_object_arena.h [302:326]
void allocateBuffer() {
void* ptr = detail::alignedMalloc(kBufferSize * sizeof(T), alignment);
#if defined(__cpp_exceptions)
if (ptr == nullptr)
throw std::bad_alloc();
#endif // __cpp_exceptions
if (buffersPos_ < buffersSize_) {
buffers_.load(std::memory_order_relaxed)[buffersPos_++] = static_cast<T*>(ptr);
} else {
const Index oldBuffersSize = buffersSize_;
T** oldBuffers = buffers_.load(std::memory_order_relaxed);
buffersSize_ = oldBuffersSize == 0 ? 2 : oldBuffersSize * 2;
T** newBuffers = new T*[buffersSize_];
if (oldBuffers != nullptr) {
std::memcpy(newBuffers, oldBuffers, sizeof(T*) * oldBuffersSize);
deleteLater_.push_back(oldBuffers);
}
newBuffers[buffersPos_++] = static_cast<T*>(ptr);
buffers_.store(newBuffers, std::memory_order_relaxed);
}
}