C++ PMR part 2

13 Feb 2022

[ c++  memory  c++17  ]

Custom memory resource

Example

#include <memory_resource>

struct device_memory_resource : std::pmr::memory_resource {
    void* do_allocate(std::size_t bytes, std::size_t);
    void do_deallocate(void* p, std::size_t, std::size_t);
    bool do_is_equal(const std::pmr::memory_resource&) const noexcept;
};

void* device_memory_resource::do_allocate(std::size_t bytes, std::size_t) {
    void* x = nullptr;
    auto const r = cudaMalloc(&x, bytes);
    if (r != cudaError_t::cudaSuccess) {
        throw std::bad_alloc();
    }

    return x;
}

void device_memory_resource::do_deallocate(void* p, std::size_t, std::size_t) {
    cudaFree(p);
}

References

Link to part 1