Merge #16957: 9% less memory: make SaltedOutpointHasher noexcept
Summary:
67d99900b0d770038c9c5708553143137b124a6c make SaltedOutpointHasher noexcept (Martin Ankerl)
Pull request description:
If the hash is not `noexcept`, `unorderd_map` has to assume that it can throw an exception. Thus when rehashing care needs to be taken. libstdc++ solves this by simply caching the hash value, which increases memory of each node by 8 bytes. Adding `noexcept` prevents this caching. In my experiments with `-reindex-chainstate -stopatheight=594000`, memory usage (maximum resident set size) has decreased by 9.4% while runtime has increased by 1.6% due to additional hashing. Additionally, memusage::DynamicUsage() is now more accurate and does not underestimate. | | runtime h:mm:ss | max RSS kbyte | |---------------------------------------|-----------------|--------------| | master | 4:13:59 | 7696728 | | 2019-09-SaltedOutpointHasher-noexcept | 4:18:11 | 6971412 | | change | +1.65% | -9,42% | Comparison of progress masters vs. 2019-09-SaltedOutpointHasher-noexcept 
Backport of Core PR16957
Release notes were backported from Core PR17422
Test Plan: ninja check check-functional for sanity
Reviewers: #bitcoin_abc, deadalnix
Reviewed By: #bitcoin_abc, deadalnix
Differential Revision: https://reviews.bitcoinabc.org/D7996