std::pmr::m...do_allocate(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

std::pmr::monotonic_buffer_resource::do_allocate β€” bestie, it's literally std::pmr::monotonic_buffer_resource::do_allocate, the one and only. We're in the C++ Standard Libary manual, section 3, page std::pmr::m...do_allocate(3). Yes, β€œLibary” is spelled like that in the header, and we respect the header’s main-character energy. ✨

🌈 Synopsis 🌈

virtual void* do_allocate( std::size_t bytes, std::size_t alignment
(since C++17)
);

The vibe: it allocates storage. πŸ’…

If the current buffer has sufficient unused space to fit a block with the specified size and alignment, it allocates the return block from the current buffer. Easy peasy. πŸŽ€

Otherwise, this function allocates a new buffer by calling upstream_resource()->allocate(n, m), where n is not less than the greater of bytes and the next buffer size, and m is not less than alignment. It sets the new buffer as the current buffer, increases the next buffer size by an implementation-defined growth factor (which is not necessarily integral), and then allocates the return block from the newly allocated buffer. Iconic behavior, no cap. πŸ¦‹

πŸŽ€ Return value πŸŽ€

A pointer to allocated storage of at least bytes bytes in size, aligned to the specified alignment if such alignment is supported, and to alignof(std::max_align_t) otherwise. Slay. πŸ’–

😭 Exceptions 😭

Throws nothing unless calling allocate() on the upstream memory resource throws. That's the whole tea. πŸ™ˆ

πŸ‘‘ See also πŸ‘‘

  • allocate β€” allocates memory (public member function of std::pmr::memory_resource).
  • do_allocate β€” allocates memory [virtual] (virtual private member function of std::pmr::memory_resource).

Source check: this came from http://cppreference.com, stamped 2024.06.10, with footer std::pmr::m...do_allocate(3). Byeee, go allocate something iconic πŸ«ΆπŸ’œ

πŸ“¦ where this page comes from