1 #ifndef CRYPTO3_MLOCK_ALLOCATOR_HPP
2 #define CRYPTO3_MLOCK_ALLOCATOR_HPP
4 #include <nil/crypto3/utilities/detail/mem_pool/mem_pool.hpp>
5 #include <nil/crypto3/utilities/detail/os_utils.hpp>
22 void *
allocate(
size_t num_elems,
size_t elem_size) {
27 const size_t n = num_elems * elem_size;
28 if (n / elem_size != num_elems) {
32 return m_pool->allocate(n);
35 bool deallocate(
void *p,
size_t num_elems,
size_t elem_size) BOOST_NOEXCEPT {
40 size_t n = num_elems * elem_size;
46 if (n / elem_size != num_elems) {
50 return m_pool->deallocate(p, n);
59 const size_t mem_to_lock = get_memory_locking_limit();
62 m_locked_pages =
static_cast<uint8_t *
>(allocate_locked_pages(mem_to_lock));
65 m_locked_pages_size = mem_to_lock;
66 m_pool = std::make_unique<memory_pool>(m_locked_pages, m_locked_pages_size, system_page_size(),
67 CRYPTO3_MLOCK_ALLOCATOR_MIN_ALLOCATION,
68 CRYPTO3_MLOCK_ALLOCATOR_MAX_ALLOCATION, 4);
77 free_locked_pages(m_locked_pages, m_locked_pages_size);
81 std::unique_ptr<memory_pool> m_pool;
82 uint8_t *m_locked_pages =
nullptr;
83 size_t m_locked_pages_size = 0;
Definition: locking_allocator.hpp:15
bool deallocate(void *p, size_t num_elems, size_t elem_size) BOOST_NOEXCEPT
Definition: locking_allocator.hpp:35
mlock_allocator(const mlock_allocator &)=delete
void * allocate(size_t num_elems, size_t elem_size)
Definition: locking_allocator.hpp:22
static mlock_allocator & instance()
Definition: locking_allocator.hpp:17
mlock_allocator & operator=(const mlock_allocator &)=delete