aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLőrinc <lorinc.pap@gmail.com>2024-02-25 17:50:25 +0100
committerLőrinc <lorinc.pap@gmail.com>2024-02-28 17:23:54 +0000
commita19235c14b3dc02de30b5d769de29d1752c23dbd (patch)
treea82fdf5ed60a47c7913cf3efa2c0e6d605e8cd3d /src
parentb7489ecb52c1f99facb7c81c5e46963394d0620d (diff)
downloadbitcoin-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.cpp2
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)) {