• Raymond Hettinger's avatar
    * Optimized list appends and pops by making fewer calls the underlying system · 4bb9540d
    Raymond Hettinger yazdı
      realloc().  This is achieved by tracking the overallocation size in a new
      field and using that information to skip calls to realloc() whenever
      possible.
    
    * Simplified and tightened the amount of overallocation.  For larger lists,
      this overallocates by 1/8th (compared to the previous scheme which ranged
      between 1/4th to 1/32nd over-allocation).  For smaller lists (n<6), the
      maximum overallocation is one byte (formerly it could be upto eight bytes).
      This saves memory in applications with large numbers of small lists.
    
    * Eliminated the NRESIZE macro in favor of a new, static list_resize function
      that encapsulates the resizing logic.  Coverting this back to macro would
      give a small (under 1%) speed-up.  This was too small to warrant the loss
      of readability, maintainability, and de-coupling.
    
    * Some functions using NRESIZE had grown unnecessarily complex in their
      efforts to bend to the macro's calling pattern.  With the new list_resize
      function in place, those other functions could be simplified.  That is
      being saved for a separate patch.
    
    * The ob_item==NULL check could be eliminated from the new list_resize
      function.  This would entail finding each piece of code that sets ob_item
      to NULL and adding a new line to invalidate the overallocation tracking
      field.  Rather than impose a new requirement on other pieces of list code,
      it was preferred to leave the NULL check in place and retain the benefits
      of decoupling, maintainability and information hiding (only PyList_New()
      and list_sort() need to know about the new field).  This approach also
      reduces the odds of breaking an extension module.
    
    (Collaborative effort by Raymond Hettinger, Hye-Shik Chang, Tim Peters,
     and Armin Rigo.)
    4bb9540d
listobject.h 1.77 KB