Wladimir J. van der Laan 6b9405e319
Merge #16957: 9% less memory: make SaltedOutpointHasher noexcept
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
  ![out](https://user-images.githubusercontent.com/14386/65541887-69424e00-df0e-11e9-8644-b3a068ed8c3f.png)

ACKs for top commit:
  jamesob:
    Tested ACK 67d99900b0

Tree-SHA512: 9c44e3cca993b5a564dd61ebd2926b9c4a238609ea4d283514c018236f977d935e35a384dd4696486fd3d78781dd2ba190bb72596e20a5e931042fa465872a0b
2019-09-30 09:47:28 +02:00
..
2019-01-26 12:45:48 -05:00
2018-09-07 08:21:14 -04:00
2018-12-29 10:15:01 +01:00
2018-08-13 13:57:15 +02:00
2018-07-27 07:15:02 -04:00
2019-09-25 20:56:38 +02:00
2018-07-27 07:15:02 -04:00
2019-02-22 17:38:45 -08:00
2019-02-22 17:38:45 -08:00
2019-04-10 12:16:52 +01:00
2018-08-11 09:34:47 +03:00
2019-04-09 17:53:08 -04:00
2018-07-27 07:15:02 -04:00
2019-03-27 13:59:50 +01:00
2018-07-27 07:15:02 -04:00
2019-06-20 12:12:24 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 11:52:18 -07:00
2019-09-10 07:53:09 -06:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00