瀏覽代碼

nca_patch: Significantly reduce the stack usage size within SearchBucketEntry()

Previously this function was using ~16KB of stack (16528 bytes), which
was caused by the function arguments being taken by value rather than by
reference.

We can make this significantly lighter on the stack by taking them by
reference.
Lioncash 5 年之前
父節點
當前提交
66fc037ef2
共有 1 個文件被更改,包括 4 次插入4 次删除
  1. 4 4
      src/core/file_sys/nca_patch.cpp

+ 4 - 4
src/core/file_sys/nca_patch.cpp

@@ -14,10 +14,10 @@
 namespace FileSys {
 namespace {
 template <bool Subsection, typename BlockType, typename BucketType>
-std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, BlockType block,
-                                                      BucketType buckets) {
+std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, const BlockType& block,
+                                                      const BucketType& buckets) {
     if constexpr (Subsection) {
-        const auto last_bucket = buckets[block.number_buckets - 1];
+        const auto& last_bucket = buckets[block.number_buckets - 1];
         if (offset >= last_bucket.entries[last_bucket.number_entries].address_patch) {
             return {block.number_buckets - 1, last_bucket.number_entries};
         }
@@ -29,7 +29,7 @@ std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, BlockType bloc
         block.base_offsets.begin() + 1, block.base_offsets.begin() + block.number_buckets,
         [&offset](u64 base_offset) { return base_offset <= offset; });
 
-    const auto bucket = buckets[bucket_id];
+    const auto& bucket = buckets[bucket_id];
 
     if (bucket.number_entries == 1) {
         return {bucket_id, 0};