[PATCH] PR 83938 Reduce memory consumption in stable_sort/inplace_merge

François Dumont frs.dumont@gmail.com
Thu Jun 11 06:32:42 GMT 2020


As we are on patching algos we still have this old one.

     From the original patch I only kept the memory optimization part as 
the new performance test was not showing good result for the other part 
to change pivot value. I also kept the small change in 
get_temporary_buffer even if I don't have strong feeling about it, it 
just make sure that we'll try to allocate 1 element as a last chance 
allocation.

     Note that there is still place for an improvement. If we miss 
memory on the heap we then use a recursive implementation which then 
rely on stack memory. I would be surprise that a system which miss heap 
memory would have no problem to allocate about the same on the stack so 
we will surely end up in a stack overflow. I still have this on my todo 
even if I already made several tries with no satisfying result in terms 
of performance.

     Tested under Linux x86_64.

Commit message:

     libstdc++: Limit memory allocation in stable_sort/inplace_merge (PR 
83938)

     Reduce memory consumption in stable_sort/inplace_merge to what is used.

     Co-authored-by: François Dumont  <fdumont@gcc.gnu.org>

     libstdc++-v3/ChangeLog:

     2020-06-11  John Chang  <john.chang@samba.tv>
                 François Dumont  <fdumont@gcc.gnu.org>

             PR libstdc++/83938
             * include/bits/stl_tempbuf.h (get_temporary_buffer): Change 
__len
             computation in the loop.
             * include/bits/stl_algo.h:
             (__inplace_merge): Take temporary buffer length from 
smallest range.
             (__stable_sort): Limit temporary buffer length.
             * testsuite/25_algorithms/inplace_merge/1.cc (test03): Test 
different
             pivot positions.
             * testsuite/performance/25_algorithms/stable_sort.cc: Test 
stable_sort
             under different heap memory conditions.
             * testsuite/performance/25_algorithms/inplace_merge.cc: New.

Ok to commit ?

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr83938.patch
Type: text/x-patch
Size: 16082 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20200611/501678db/attachment-0001.bin>


More information about the Libstdc++ mailing list