aboutsummaryrefslogtreecommitdiff
path: root/disassembler_win32.h
diff options
context:
space:
mode:
authorEtienne Pierre-doray <etiennep@chromium.org>2021-04-16 18:20:33 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 21:11:19 -0700
commite1c6a71ae0b029b30d69960900d9bb1a1ad45945 (patch)
treed0a23cf895e7098b14d360fb8eead4982479f91f /disassembler_win32.h
parentfc058e3b20ed8f45828c24d0da6f4bfcdcf737b1 (diff)
downloadzucchini-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.h4
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