[patch] No allocation for empty unordered containers

François Dumont frs.dumont@gmail.com
Fri Jul 25 20:53:00 GMT 2014


Hi

     I think I never get feedback regarding this patch proposal. Note 
that if accepted the doc will have to be updated regarding the default 
hint value.

Thanks


On 03/06/2014 22:44, François Dumont wrote:
> Hi
>
>     Thanks to the single bucket introduced to make move semantic 
> noexcept we can also avoid some over allocations. Here is a patch to 
> avoid any allocation on default instantiation, on range constructor 
> when range is empty and on construction from an initialization list 
> when this list is empty too. I had to make all default hint value to 0 
> so that if this value is used the rehash policy next bucket returns 1 
> bucket.
>
>     I don't know if you had in mind to noexcept qualify the default 
> constructor but it would mean to have a real default constructor and 
> another to deal with the hint which wouldn't match the Standard so no 
> noexcept qualification at the moment.
>
> Tested under Linux x86_64.normal debug and profile modes.
>
>
> 2014-06-03  François Dumont <fdumont@gcc.gnu.org>
>
>     * include/bits/hashtable.h: Make use of the internal single bucket to
>     limit allocation as long as container remains empty.
>     * include/bits/unordered_map.h: Set default bucket hint to 0 in
>     constructors to avoid allocation.
>     * include/bits/unordered_set.h: Likewise.
>     * include/debug/unordered_map: Likewise.
>     * include/debug/unordered_set: Likewise.
>     * include/profile/unordered_map: Likewise.
>     * include/profile/unordered_set: Likewise.
>     * src/c++11/hashtable_c++0x.cc (_Prime_rehash_policy::_M_next_bkt):
>     Returns 1 for hint 0.
>     * testsuite/23_containers/unordered_map/allocator/
>     empty_instantiation.cc:    New.
>     * testsuite/23_containers/unordered_multimap/allocator/
>     empty_instantiation.cc:    New.
>     * testsuite/23_containers/unordered_set/allocator/
>     empty_instantiation.cc: New.
>     * testsuite/23_containers/unordered_multiset/allocator/
>     empty_instantiation.cc: New.
>
> Ok to commit ?
>
> François
>
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: hashtable.patch
Type: text/x-patch
Size: 22877 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20140725/b56b4876/attachment.bin>


More information about the Libstdc++ mailing list