| 418 | constexpr size_t __default_growth_factor = 2; |
| 419 | |
| 420 | static void* align_down(size_t align, size_t size, void*& ptr, size_t& space) { |
| 421 | if (size > space) |
| 422 | return nullptr; |
| 423 | |
| 424 | char* p1 = static_cast<char*>(ptr); |
| 425 | char* new_ptr = reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(p1 - size) & ~(align - 1)); |
| 426 | |
| 427 | if (new_ptr < (p1 - space)) |
| 428 | return nullptr; |
| 429 | |
| 430 | ptr = new_ptr; |
| 431 | space -= p1 - new_ptr; |
| 432 | |
| 433 | return ptr; |
| 434 | } |
| 435 | |
| 436 | template <bool is_initial, typename Chunk> |
| 437 | void* __try_allocate_from_chunk(Chunk& self, size_t bytes, size_t align) { |
no outgoing calls
no test coverage detected