From 4063ce09e26b42ea4b58755c1372b47d6eeb2647 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 15 Jun 2026 08:40:37 +0000 Subject: [PATCH] [core/device_memory_manager] use more pointer/iterator stable std::vector<> instead of deque<> for multi address scatter/gather Signed-off-by: lizzie --- src/core/device_memory_manager.inc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc index 15e3a1ad52..0c22191f55 100644 --- a/src/core/device_memory_manager.inc +++ b/src/core/device_memory_manager.inc @@ -33,20 +33,21 @@ public: void GatherValues(u32 start_entry, Common::ScratchBuffer& buffer) { buffer.resize(8); - buffer.resize(0); - size_t index = 0; - const auto add_value = [&](u32 value) { - buffer.resize(index + 1); + const auto add_value = [&buffer](u32 value, size_t index) { + if (buffer.size() < index + 1) + buffer.resize(index + 1); buffer[index++] = value; + return index; }; + size_t index = 0; u32 iter_entry = start_entry; Entry* current = &storage[iter_entry - 1]; - add_value(current->value); + index = add_value(current->value, index); while (current->next_entry != 0) { iter_entry = current->next_entry; current = &storage[iter_entry - 1]; - add_value(current->value); + index = add_value(current->value, index); } } @@ -124,8 +125,8 @@ private: u32 value{}; }; - std::deque storage; - std::deque free_entries; + std::vector storage; + boost::container::deque free_entries; }; struct EmptyAllocator { @@ -619,7 +620,7 @@ template void DeviceMemoryManager::UpdatePagesCachedCount(DAddr addr, size_t size, s32 delta) { Common::ScopedRangeLock lk(counter_guard, addr, size); UpdatePagesCachedCountNoLock(addr, size, delta); -} +} template void DeviceMemoryManager::UpdatePagesCachedBatch(std::span> ranges, s32 delta) {