mapNextTx: use pointer as key, simplify value
Saves about 10% of application memory usage once the mempool warms up. Since the mempool is DynamicUsage-regulated, this will translate to a larger mempool in the same amount of space. Map value type: eliminate the vin index; no users of the map need to know which input of the transaction is spending the prevout. Map key type: replace the COutPoint with a pointer to a COutPoint. A COutPoint is 36 bytes, but each COutPoint is accessible from the same map entry's value. A trivial DereferencingComparator functor allows indirect map keys, but the resulting syntax is misleading: `map.find(&outpoint)`. Implement an indirectmap that acts as a wrapper to a map that uses a DereferencingComparator, supporting a syntax that accurately reflect the container's semantics: inserts and iterators use pointers since they store pointers and need them to remain constant and dereferenceable, but lookup functions take const references.
This commit is contained in:
@@ -94,6 +94,7 @@ BITCOIN_CORE_H = \
|
||||
core_memusage.h \
|
||||
httprpc.h \
|
||||
httpserver.h \
|
||||
indirectmap.h \
|
||||
init.h \
|
||||
key.h \
|
||||
keystore.h \
|
||||
|
||||
Reference in New Issue
Block a user