summaryrefslogtreecommitdiffstats
path: root/libcxx/src/experimental/memory_resource.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2018-10-24 22:44:01 +0000
committerEric Fiselier <eric@efcs.ca>2018-10-24 22:44:01 +0000
commit7e6448bb02e67e4b3ad26667d2ac95627104abfd (patch)
treef296a5430f6fc004d0efda9c6860a376b611fe10 /libcxx/src/experimental/memory_resource.cpp
parent7faf7ae0ad49672f5f9922bb1572595bfc8e7d1b (diff)
downloadbcm5719-llvm-7e6448bb02e67e4b3ad26667d2ac95627104abfd.tar.gz
bcm5719-llvm-7e6448bb02e67e4b3ad26667d2ac95627104abfd.zip
Implement sized deallocation for std::allocator and friends.
Summary: C++14 sized deallocation is disabled by default due to ABI concerns. However, when a user manually enables it then libc++ should take advantage of it since sized deallocation can provide a significant performance win depending on the underlying malloc implementation. (Note that libc++'s definitions of sized delete don't do anything special yet, but users are free to provide their own). This patch updates __libcpp_deallocate to selectively call sized operator delete when it's available. `__libcpp_deallocate_unsized` should be used when the size of the allocation is unknown. On Apple this patch makes no attempt to determine if the sized operator delete is unavailable, only that the language feature is enabled. This could cause a compile error when using `std::allocator`, but the same compile error would occur whenever the user calls `new`, so I don't think it's a problem. Reviewers: ldionne, mclow.lists Reviewed By: ldionne Subscribers: rsmith, ckennelly, libcxx-commits, christof Differential Revision: https://reviews.llvm.org/D53120 llvm-svn: 345214
Diffstat (limited to 'libcxx/src/experimental/memory_resource.cpp')
-rw-r--r--libcxx/src/experimental/memory_resource.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/libcxx/src/experimental/memory_resource.cpp b/libcxx/src/experimental/memory_resource.cpp
index a3b64cc8b49..1f31f88d808 100644
--- a/libcxx/src/experimental/memory_resource.cpp
+++ b/libcxx/src/experimental/memory_resource.cpp
@@ -33,8 +33,8 @@ protected:
virtual void* do_allocate(size_t __size, size_t __align)
{ return _VSTD::__libcpp_allocate(__size, __align); /* FIXME */}
- virtual void do_deallocate(void * __p, size_t, size_t __align)
- { _VSTD::__libcpp_deallocate(__p, __align); /* FIXME */ }
+ virtual void do_deallocate(void * __p, size_t __n, size_t __align)
+ { _VSTD::__libcpp_deallocate(__p, __n, __align); /* FIXME */ }
virtual bool do_is_equal(memory_resource const & __other) const _NOEXCEPT
{ return &__other == this; }
OpenPOWER on IntegriCloud