فهرست منبع

Kernel: Avoid some un-necessary copies coming from range based for loops

- The irq_controller was getting add_ref/released needlessly during enumeration.

- Used ranges were also getting needlessly copied.
Brian Gianforcaro 4 سال پیش
والد
کامیت
7482cb6531
2فایلهای تغییر یافته به همراه3 افزوده شده و 3 حذف شده
  1. 1 1
      Kernel/Interrupts/InterruptManagement.cpp
  2. 2 2
      Kernel/VM/MemoryManager.cpp

+ 1 - 1
Kernel/Interrupts/InterruptManagement.cpp

@@ -117,7 +117,7 @@ RefPtr<IRQController> InterruptManagement::get_responsible_irq_controller(u8 int
     if (m_interrupt_controllers.size() == 1 && m_interrupt_controllers[0]->type() == IRQControllerType::i8259) {
     if (m_interrupt_controllers.size() == 1 && m_interrupt_controllers[0]->type() == IRQControllerType::i8259) {
         return m_interrupt_controllers[0];
         return m_interrupt_controllers[0];
     }
     }
-    for (auto irq_controller : m_interrupt_controllers) {
+    for (auto& irq_controller : m_interrupt_controllers) {
         if (irq_controller->gsi_base() <= interrupt_vector)
         if (irq_controller->gsi_base() <= interrupt_vector)
             if (!irq_controller->is_hard_disabled())
             if (!irq_controller->is_hard_disabled())
                 return irq_controller;
                 return irq_controller;

+ 2 - 2
Kernel/VM/MemoryManager.cpp

@@ -195,7 +195,7 @@ void MemoryManager::parse_memory_map()
     auto* mmap_begin = reinterpret_cast<multiboot_memory_map_t*>(low_physical_to_virtual(multiboot_info_ptr->mmap_addr));
     auto* mmap_begin = reinterpret_cast<multiboot_memory_map_t*>(low_physical_to_virtual(multiboot_info_ptr->mmap_addr));
     auto* mmap_end = reinterpret_cast<multiboot_memory_map_t*>(low_physical_to_virtual(multiboot_info_ptr->mmap_addr) + multiboot_info_ptr->mmap_length);
     auto* mmap_end = reinterpret_cast<multiboot_memory_map_t*>(low_physical_to_virtual(multiboot_info_ptr->mmap_addr) + multiboot_info_ptr->mmap_length);
 
 
-    for (auto used_range : m_used_memory_ranges) {
+    for (auto& used_range : m_used_memory_ranges) {
         klog() << "MM: " << used_range;
         klog() << "MM: " << used_range;
     }
     }
 
 
@@ -255,7 +255,7 @@ void MemoryManager::parse_memory_map()
 
 
             // Skip used memory ranges.
             // Skip used memory ranges.
             bool should_skip = false;
             bool should_skip = false;
-            for (auto used_range : m_used_memory_ranges) {
+            for (auto& used_range : m_used_memory_ranges) {
                 if (addr.get() >= used_range.start.get() && addr.get() <= used_range.end.get()) {
                 if (addr.get() >= used_range.start.get() && addr.get() <= used_range.end.get()) {
                     should_skip = true;
                     should_skip = true;
                     break;
                     break;