diff options
author | 2019-01-09 18:16:17 +0100 | |
---|---|---|
committer | 2019-01-09 18:16:17 +0100 | |
commit | 47347fe43ec6be9a2e16a17ffbe800c63baa1f11 (patch) | |
tree | 43c3263b0bbf20e5746ecc859ca0de3a3b5fff2f /src/lib/netlist/plib/palloc.cpp | |
parent | a368aad4b309d2fa3b6ef7e9c919bd3d78692b72 (diff) |
C++ and minor performance optimizations. (nw)
Diffstat (limited to 'src/lib/netlist/plib/palloc.cpp')
-rw-r--r-- | src/lib/netlist/plib/palloc.cpp | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/src/lib/netlist/plib/palloc.cpp b/src/lib/netlist/plib/palloc.cpp index e4d31985b23..fa87c1cf94f 100644 --- a/src/lib/netlist/plib/palloc.cpp +++ b/src/lib/netlist/plib/palloc.cpp @@ -25,24 +25,24 @@ mempool::~mempool() { for (auto & b : m_blocks) { - if (b.m_num_alloc != 0) + if (b->m_num_alloc != 0) { - fprintf(stderr, "Found block with %d dangling allocations\n", static_cast<int>(b.m_num_alloc)); + fprintf(stderr, "Found block with %d dangling allocations\n", static_cast<int>(b->m_num_alloc)); } - ::operator delete(b.data); + ::operator delete(b->data); } m_blocks.clear(); } -size_t mempool::new_block() +mempool::block * mempool::new_block() { - block b; - 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; + block *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 m_blocks.size() - 1; + return b; } size_t mempool::mininfosize() @@ -59,29 +59,27 @@ size_t mempool::mininfosize() void *mempool::alloc(size_t size) { size_t rs = (size + mininfosize() + m_min_align - 1) & ~(m_min_align - 1); - for (size_t bn=0; bn < m_blocks.size(); bn++) + for (auto &b : m_blocks) { - auto &b = m_blocks[bn]; - if (b.m_free > rs) + if (b->m_free > rs) { - b.m_free -= rs; - b.m_num_alloc++; - auto i = reinterpret_cast<info *>(b.cur_ptr); - i->m_block = bn; - auto ret = reinterpret_cast<void *>(b.cur_ptr + mininfosize()); - b.cur_ptr += 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; } } { - size_t bn = new_block(); - auto &b = m_blocks[bn]; - b.m_num_alloc = 1; - b.m_free = m_min_alloc - rs; - auto i = reinterpret_cast<info *>(b.cur_ptr); - i->m_block = bn; - auto ret = reinterpret_cast<void *>(b.cur_ptr + mininfosize()); - b.cur_ptr += rs; + 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; } } @@ -91,7 +89,7 @@ void mempool::free(void *ptr) auto p = reinterpret_cast<char *>(ptr); auto i = reinterpret_cast<info *>(p - mininfosize()); - block *b = &m_blocks[i->m_block]; + block *b = i->m_block; if (b->m_num_alloc == 0) fprintf(stderr, "Argh .. double free\n"); else |