Skip to content
  • René Scharfe's avatar
    stable-qsort: avoid using potentially unaligned access · b80741e5
    René Scharfe authored and Junio C Hamano's avatar Junio C Hamano committed
    Like in the previous patch for compat/qsort_s.c, remove the optimization
    of using an on-stack buffer to avoid small allocations.  This ensures
    maximum alignment for the array elements and simplifies the code a bit.
    
    The performance impact for the current callers is unlikely to be
    noticeable:
    
     * compat/mingw.c::make_environment_block() uses ALLOC_ARRAY and
       ALLOC_GROW several times already, so another allocation of up to 1KB
       should not matter much.
    
     * diffcore-rename.c::diffcore_rename_extended() is called once per diff
       or twice per merge, and those require allocations for each object and
       more already.
    
     * merge-ort.c::detect_and_process_renames() is called once per merge.
       It's responsible for the two per-merge diffcore_rename_extended()
       calls mentioned above as well, though.  So this is possibly the most
       impacted caller.  Per-object allocations are likely to dwarf the
       additional small allocations in git_stable_qsort(), though....
    b80741e5