From 7506adbecea2f23f72a60a20c68ac5b2bcdfc875 Mon Sep 17 00:00:00 2001 From: Muhammad Zahalqa Date: Sun, 23 Aug 2020 16:04:49 +0300 Subject: [PATCH] Kernel: Avoid some allocations in command line parsing (#3213) 1. Preallocate args hashmap to prevent rehashing. 2. Use move to prevent string copies. --- Kernel/CommandLine.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Kernel/CommandLine.cpp b/Kernel/CommandLine.cpp index 8b50e7aeec5..259fb557f6b 100644 --- a/Kernel/CommandLine.cpp +++ b/Kernel/CommandLine.cpp @@ -46,7 +46,9 @@ CommandLine::CommandLine(const String& string) { s_the = this; - for (auto str : m_string.split(' ')) { + const auto& args = m_string.split(' '); + m_params.ensure_capacity(args.size()); + for (auto&& str : args) { if (str == "") { continue; } @@ -54,9 +56,9 @@ CommandLine::CommandLine(const String& string) auto pair = str.split_limit('=', 2); if (pair.size() == 1) { - m_params.set(pair[0], ""); + m_params.set(move(pair[0]), ""); } else { - m_params.set(pair[0], pair[1]); + m_params.set(move(pair[0]), move(pair[1])); } } }