diff options
author | Aliaksey Kandratsenka <alkondratenko@gmail.com> | 2015-10-04 21:12:28 -0700 |
---|---|---|
committer | Aliaksey Kandratsenka <alkondratenko@gmail.com> | 2015-11-21 17:43:42 -0800 |
commit | a9db0ae516c225543976280047b22b1e0ca08b93 (patch) | |
tree | 4159a9c1dc67b50ae565e81e0ffc7473453103a8 /src/libc_override_gcc_and_weak.h | |
parent | 88686972b9caf8fd132c4e30d89da78c3d324c27 (diff) | |
download | gperftools-a9db0ae516c225543976280047b22b1e0ca08b93.tar.gz |
implemented (disabled by default) sized delete support
gcc 5 and clang++-3.7 support sized deallocation from C++14. We are
taking advantage of that by defining sized versions of operator delete.
This is off by default so that if some existing programs that define own
global operator delete without sized variant are not broken by
tcmalloc's sized delete operator.
There is also risk of breaking exiting code that deletes objects using
wrong class (i.e. base class) without having virtual destructors.
Diffstat (limited to 'src/libc_override_gcc_and_weak.h')
-rw-r--r-- | src/libc_override_gcc_and_weak.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libc_override_gcc_and_weak.h b/src/libc_override_gcc_and_weak.h index 818e43d..5c0def2 100644 --- a/src/libc_override_gcc_and_weak.h +++ b/src/libc_override_gcc_and_weak.h @@ -71,6 +71,13 @@ void operator delete(void* p, const std::nothrow_t& nt) __THROW void operator delete[](void* p, const std::nothrow_t& nt) __THROW ALIAS(tc_deletearray_nothrow); +#ifdef ENABLE_SIZED_DELETE +void operator delete(void *p, size_t size) throw() + ALIAS(tc_delete_sized); +void operator delete[](void *p, size_t size) throw() + ALIAS(tc_deletearray_sized); +#endif + extern "C" { void* malloc(size_t size) __THROW ALIAS(tc_malloc); void free(void* ptr) __THROW ALIAS(tc_free); |