Commit e5178b98 by Pádraig Brady Committed by Jonathan Wakely

std::allocator::deallocate support sized-deallocation

Pass the size to the allocator so that it may optimize deallocation.
This was seen to significantly reduce the work required in jemalloc,
with about 40% reduction in CPU cycles in the free path.

Note jemalloc >= 5.2 is required to fix a crash with 0 sizes.

2019-05-20  Pádraig Brady  <pbrady@fb.com>

	* libstdc++-v3/include/ext/new_allocator.h (deallocate): Pass the size
	to the deallocator with -fsized-deallocation.

From-SVN: r271409
parent eb530cab
2019-05-20 Pádraig Brady <pbrady@fb.com>
* libstdc++-v3/include/ext/new_allocator.h (deallocate): Pass the size
to the deallocator with -fsized-deallocation.
2019-05-20 Jonathan Wakely <jwakely@redhat.com> 2019-05-20 Jonathan Wakely <jwakely@redhat.com>
* testsuite/experimental/memory_resource/new_delete_resource.cc: Fix * testsuite/experimental/memory_resource/new_delete_resource.cc: Fix
......
...@@ -116,16 +116,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -116,16 +116,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// __p is not permitted to be a null pointer. // __p is not permitted to be a null pointer.
void void
deallocate(pointer __p, size_type) deallocate(pointer __p, size_type __t)
{ {
#if __cpp_aligned_new #if __cpp_aligned_new
if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
{ {
::operator delete(__p, std::align_val_t(alignof(_Tp))); ::operator delete(__p,
# if __cpp_sized_deallocation
__t * sizeof(_Tp),
# endif
std::align_val_t(alignof(_Tp)));
return; return;
} }
#endif #endif
::operator delete(__p); ::operator delete(__p
#if __cpp_sized_deallocation
, __t * sizeof(_Tp)
#endif
);
} }
size_type size_type
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment