diff options
author | 2019-02-13 21:19:59 +0100 | |
---|---|---|
committer | 2019-02-13 22:37:07 +0100 | |
commit | fb685c05b9f100c46c2ae5df6532f298e45ab4f7 (patch) | |
tree | 64a6c277bd7088eb7d17d731841957e009ecdfec /src/lib/netlist/plib/palloc.cpp | |
parent | 182a06055feb06dd4cdf56654e007c6e61dd3496 (diff) |
netlist: memory allocation clean-up. (nw)
Diffstat (limited to 'src/lib/netlist/plib/palloc.cpp')
-rw-r--r-- | src/lib/netlist/plib/palloc.cpp | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/src/lib/netlist/plib/palloc.cpp b/src/lib/netlist/plib/palloc.cpp deleted file mode 100644 index 4115a450a40..00000000000 --- a/src/lib/netlist/plib/palloc.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders:Couriersud -/* - * palloc.c - * - */ - -#include "pconfig.h" -#include "palloc.h" -#include "pexception.h" -#include "pfmtlog.h" -#include "pstream.h" - -#include <algorithm> - -namespace plib { - -//============================================================ -// Memory pool -//============================================================ - -mempool::mempool(size_t min_alloc, size_t min_align) -: m_min_alloc(min_alloc), m_min_align(min_align) -{ -} -mempool::~mempool() -{ - for (auto & b : m_blocks) - { - if (b->m_num_alloc != 0) - { - perrlogger("Found block with {} dangling allocations\n", b->m_num_alloc); - } - ::operator delete(b->data); - } - m_blocks.clear(); -} - -mempool::block * mempool::new_block() -{ - auto *b = new block(); - b->data = static_cast<char *>(::operator new(m_min_alloc)); - b->cur_ptr = b->data; - b->m_free = m_min_alloc; - b->m_num_alloc = 0; - m_blocks.push_back(b); - return b; -} - -size_t mempool::mininfosize() -{ - size_t sinfo = sizeof(mempool::info); -#ifdef __APPLE__ - size_t ma = 16; -#else - size_t ma = 8; -#endif - return ((std::max(m_min_align, sinfo) + ma - 1) / ma) * ma; -} - -void *mempool::alloc(size_t size) -{ - size_t rs = (size + mininfosize() + m_min_align - 1) & ~(m_min_align - 1); - for (auto &b : m_blocks) - { - if (b->m_free > rs) - { - b->m_free -= rs; - b->m_num_alloc++; - auto i = reinterpret_cast<info *>(b->cur_ptr); - i->m_block = b; - auto ret = reinterpret_cast<void *>(b->cur_ptr + mininfosize()); - b->cur_ptr += rs; - return ret; - } - } - { - block *b = new_block(); - b->m_num_alloc = 1; - b->m_free = m_min_alloc - rs; - auto i = reinterpret_cast<info *>(b->cur_ptr); - i->m_block = b; - auto ret = reinterpret_cast<void *>(b->cur_ptr + mininfosize()); - b->cur_ptr += rs; - return ret; - } -} - -void mempool::free(void *ptr) -{ - auto p = reinterpret_cast<char *>(ptr); - - auto i = reinterpret_cast<info *>(p - mininfosize()); - block *b = i->m_block; - if (b->m_num_alloc == 0) - throw plib::pexception("mempool::free - double free was called\n"); - else - { - //b->m_free = m_min_alloc; - //b->cur_ptr = b->data; - } - b->m_num_alloc--; -} - -} // namespace plib |