[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