Is there any benefit to use multiple heaps for memory management purposes?

前端 未结 5 2051
-上瘾入骨i
-上瘾入骨i 2021-02-15 17:37

I am a student of a system software faculty. Now I\'m developing a memory manager for Windows. Here\'s my simple implementation of malloc() and free():

5条回答
  •  悲&欢浪女
    2021-02-15 17:54

    This is a good link that elaborates on why you may need multiple heap: https://caligari.dartmouth.edu/doc/ibmcxx/en_US/doc/libref/concepts/cumemmng.htm

    "Why Use Multiple Heaps?
    Using a single runtime heap is fine for most programs. However, using multiple 
    heaps can be more efficient and can help you improve your program's performance 
    and reduce wasted memory for a number of reasons:
    
    1- When you allocate from a single heap, you may end up with memory blocks on
       different pages of memory. For example, you might have a linked list that 
       allocates memory each time you add a node to the list. If you allocate memory for
       other data in between adding nodes, the memory blocks for the nodes could end up
       on many different pages. To access the data in the list, the system may have to 
       swap many pages, which can significantly slow your program.
    
       With multiple heaps, you can specify which heap you allocate from. For example, 
       you might create a heap specifically for the linked list. The list's memory blocks 
       and the data they contain would remain close together on fewer pages, reducing the 
       amount of swapping required.
    
     2- In multithread applications, only one thread can access the heap at a time to 
        ensure memory is safely allocated and freed. For example, say thread 1 is 
        allocating memory, and thread 2 has a call to free. Thread 2 must wait until 
        thread 1 has finished its allocation before it can access the heap. Again, this 
        can slow down performance, especially if your program does a lot of memory 
        operations.
    
        If you create a separate heap for each thread, you can allocate from them 
        concurrently, eliminating both the waiting period and the overhead required to 
        serialize access to the heap.
    
    
     3- With a single heap, you must explicitly free each block that you allocate. If you 
        have a linked list that allocates memory for each node, you have to traverse the 
        entire list and free each block individually, which can take some time.
    
        If you create a separate heap for that linked list, you can destroy it with a 
        single call and free all the memory at once.
    
      4- When you have only one heap, all components share it (including the IBM C and 
         C++ Compilers runtime library, vendor libraries, and your own code). If one 
         component corrupts the heap, another component might fail. You may have trouble 
         discovering the cause of the problem and where the heap was damaged.
    
         With multiple heaps, you can create a separate heap for each component, so if 
         one damages the heap (for example, by using a freed pointer), the others can 
         continue unaffected. You also know where to look to correct the problem."
    

提交回复
热议问题