std::pmr::mono...buffer_resource(3cxx)

πŸ’– std::pmr::monotonic_buffer_resource πŸ’–

manual page: std::pmr::mono...buffer_resource(3cxx) β€” yes bestie, that truncated lil header is the actual manual page name. We are in libstdc++ land. πŸ’…

🌸 NAME 🌸

std::pmr::monotonic_buffer_resource β€” a memory resource that allocates from a fixed-size buffer. That is the whole vibe: fixed-size buffer, no cap. ✨

✨ SYNOPSIS ✨

#include <memory_resource>

Inherits std::pmr::memory_resource.

🫢 Public Member Functions

  • monotonic_buffer_resource (const monotonic_buffer_resource &)=delete β€” copy constructor? deleted. =delete, not today. 🚫
  • monotonic_buffer_resource (memory_resource *__upstream) noexcept β€” constructor taking an upstream memory_resource*; it is noexcept.
  • monotonic_buffer_resource (size_t __initial_size) noexcept β€” constructor taking an initial size; it is noexcept.
  • monotonic_buffer_resource (size_t __initial_size, memory_resource *__upstream) noexcept β€” constructor taking an initial size and an upstream memory_resource*; it is noexcept.
  • monotonic_buffer_resource (void *__buffer, size_t __buffer_size) noexcept β€” constructor taking a buffer and its size; it is noexcept.
  • monotonic_buffer_resource (void *__buffer, size_t __buffer_size, memory_resource *__upstream) noexcept β€” constructor taking a buffer, a buffer size, and an upstream memory_resource*; it is noexcept.
  • void * allocate (size_t __bytes, size_t __alignment=_S_max_align) β€” allocate __bytes with alignment defaulting to _S_max_align. ✨
  • void deallocate (void *__p, size_t __bytes, size_t __alignment=_S_max_align) β€” deallocate __p; alignment defaults to _S_max_align. Remember: do_deallocate is the no-op queen here. πŸ’€
  • bool is_equal (const memory_resource &__other) const noexcept β€” equality check, noexcept.
  • monotonic_buffer_resource & operator= (const monotonic_buffer_resource &)=delete β€” assignment operator is deleted too; copying is not invited. 🚫
  • void release () noexcept β€” release, noexcept.
  • memory_resource * upstream_resource () const noexcept β€” returns the upstream memory_resource*; noexcept.

πŸ›‘οΈ Protected Member Functions

  • void * do_allocate (size_t __bytes, size_t __alignment) override β€” protected override hook.
  • void do_deallocate (void *, size_t, size_t) override β€” protected override hook.
  • bool do_is_equal (const memory_resource &__other) const noexcept override β€” protected override hook, and it is noexcept.

🌈 Detailed Description 🌈

A memory resource that allocates from a fixed-size buffer. Okay so the main-character feature of a pmr::monotonic_buffer_resource is that its do_deallocate does nothing. Literally nothing. This makes it very fast because there is no need to manage a free list, and every allocation simply returns a new block of memory, rather than searching for a suitably-sized free block. Because deallocating is a no-op, the amount of memory used by the resource only grows until release() (or the destructor) is called to return all memory to upstream. The way it just keeps going up? Monotonic behavior, iykyk. πŸ“ˆ

A monotonic_buffer_resource can be initialized with a buffer that will be used to satisfy all allocation requests, until the buffer is full. After that, a new buffer will be allocated from the upstream resource. By using a stack buffer and pmr::null_memory_resource() as the upstream, you can get a memory resource that only uses the stack and never dynamically allocates. Obsessed with the no-dynamic-allocation fantasy. 🫢

⏳ Since ⏳

C++17, bestie. That is when this icon entered the chat. πŸ’…

🧚 Member Function Documentation 🧚

  • void * std::pmr::monotonic_buffer_resource::do_allocate (size_t __bytes, size_t __alignment) [inline], [override], [protected], [virtual] β€” implements std::pmr::memory_resource.
  • void std::pmr::monotonic_buffer_resource::do_deallocate (void *, size_t, size_t) [inline], [override], [protected], [virtual] β€” implements std::pmr::memory_resource.
  • bool std::pmr::monotonic_buffer_resource::do_is_equal (const memory_resource & __other) const [inline], [override], [protected], [virtual], [noexcept] β€” implements std::pmr::memory_resource.

πŸ‘‘ Author πŸ‘‘

Not a human bestie: generated automatically by Doxygen for libstdc++ from the source code. πŸ€–βœ¨


mwah πŸ’‹ β€” this Doxygen-generated libstdc++ page is std::pmr::mono...buffer_resource(3cxx); its footer line says libstdstd::pmr::mono...buffer_resource(3cxx), and there is no date printed, so I am not making one up. 🌈✨

πŸ“¦ where this page comes from