diff options
author | Lőrinc <lorinc.pap@gmail.com> | 2024-02-25 17:50:25 +0100 |
---|---|---|
committer | Lőrinc <lorinc.pap@gmail.com> | 2024-02-28 17:23:54 +0000 |
commit | a19235c14b3dc02de30b5d769de29d1752c23dbd (patch) | |
tree | a82fdf5ed60a47c7913cf3efa2c0e6d605e8cd3d /src | |
parent | b7489ecb52c1f99facb7c81c5e46963394d0620d (diff) | |
download | bitcoin-a19235c14b3dc02de30b5d769de29d1752c23dbd.tar.xz |
Preallocate result in `TryParseHex` to avoid resizing
Running `make && ./src/bench/bench_bitcoin -filter=HexParse` a few times results in:
```
| ns/base16 | base16/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 0.68 | 1,465,555,976.27 | 0.8% | 0.01 | `HexParse`
| 0.68 | 1,472,962,920.18 | 0.3% | 0.01 | `HexParse`
| 0.68 | 1,476,159,423.00 | 0.3% | 0.01 | `HexParse`
```
Diffstat (limited to 'src')
-rw-r--r-- | src/util/strencodings.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp index a54f408496..b51b283a69 100644 --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -81,6 +81,8 @@ template <typename Byte> std::optional<std::vector<Byte>> TryParseHex(std::string_view str) { std::vector<Byte> vch; + vch.reserve(str.size() / 2); // two hex characters form a single byte + auto it = str.begin(); while (it != str.end()) { if (IsSpace(*it)) { |