diff options
author | Etienne Pierre-doray <etiennep@chromium.org> | 2021-04-16 18:20:33 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-25 21:11:19 -0700 |
commit | e1c6a71ae0b029b30d69960900d9bb1a1ad45945 (patch) | |
tree | d0a23cf895e7098b14d360fb8eead4982479f91f /disassembler_win32.h | |
parent | fc058e3b20ed8f45828c24d0da6f4bfcdcf737b1 (diff) | |
download | zucchini-e1c6a71ae0b029b30d69960900d9bb1a1ad45945.tar.gz |
[zucchini] Use deque to store rel32_locations.
An optimization to reduce zucchini peak memory footprint.
MakeReadRel32 bring peak memory unnecessarily high due to std::vector
allocation heuristic, along with shrink_to_fit which temporarily
forces additional allocation: in the order of 32MB+19MB while only
19MB was needed.
deque puts less memory pressure than vector since it doesn't have
contiguous requirement and shrink_to_fit can be done in-place.
deque
Zucchini.PeakPagefileUsage 738876 KiB
Zucchini.PeakPagefileUsageChange 717436 KiB
Zucchini.PeakWorkingSetSize 632284 KiB
Zucchini.PeakWorkingSetSizeChange 623464 KiB
Zucchini.TotalTime 9.40955 s
vector
Zucchini.PeakPagefileUsage 755252 KiB
Zucchini.PeakPagefileUsageChange 733820 KiB
Zucchini.PeakWorkingSetSize 632660 KiB
Zucchini.PeakWorkingSetSizeChange 624616 KiB
Zucchini.TotalTime 10.3224 s
Bug: 1194281
Change-Id: Ic5a7f529d4465241990dbe27a485a67b32ab44b1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2830864
Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org>
Reviewed-by: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#873383}
NOKEYCHECK=True
GitOrigin-RevId: 52f908bb699f8d106a1c43e10257759cce90500d
Diffstat (limited to 'disassembler_win32.h')
-rw-r--r-- | disassembler_win32.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/disassembler_win32.h b/disassembler_win32.h index 6c7ba91..8f9fd58 100644 --- a/disassembler_win32.h +++ b/disassembler_win32.h @@ -8,6 +8,7 @@ #include <stddef.h> #include <stdint.h> +#include <deque> #include <memory> #include <string> #include <utility> @@ -108,7 +109,8 @@ class DisassemblerWin32 : public Disassembler { std::vector<offset_t> reloc_block_offsets_; offset_t reloc_end_ = 0; std::vector<offset_t> abs32_locations_; - std::vector<offset_t> rel32_locations_; + // Using std::deque to reduce peak memory footprint. + std::deque<offset_t> rel32_locations_; // Initialization states of reference storage, used for lazy initialization. // TODO(huangs): Investigate whether lazy initialization is useful for memory |