OLD | NEW |
1 // Copyright (c) 2005, Google Inc. | 1 // Copyright (c) 2005, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 void* memalign(size_t align, size_t s) __THROW ALIAS("tc_memalign"); | 275 void* memalign(size_t align, size_t s) __THROW ALIAS("tc_memalign"); |
276 void* valloc(size_t size) __THROW ALIAS("tc_valloc"); | 276 void* valloc(size_t size) __THROW ALIAS("tc_valloc"); |
277 void* pvalloc(size_t size) __THROW ALIAS("tc_pvalloc"); | 277 void* pvalloc(size_t size) __THROW ALIAS("tc_pvalloc"); |
278 int posix_memalign(void** r, size_t a, size_t s) __THROW | 278 int posix_memalign(void** r, size_t a, size_t s) __THROW |
279 ALIAS("tc_posix_memalign"); | 279 ALIAS("tc_posix_memalign"); |
280 void malloc_stats(void) __THROW ALIAS("tc_malloc_stats"); | 280 void malloc_stats(void) __THROW ALIAS("tc_malloc_stats"); |
281 int mallopt(int cmd, int value) __THROW ALIAS("tc_mallopt"); | 281 int mallopt(int cmd, int value) __THROW ALIAS("tc_mallopt"); |
282 #ifdef HAVE_STRUCT_MALLINFO | 282 #ifdef HAVE_STRUCT_MALLINFO |
283 struct mallinfo mallinfo(void) __THROW ALIAS("tc_mallinfo"); | 283 struct mallinfo mallinfo(void) __THROW ALIAS("tc_mallinfo"); |
284 #endif | 284 #endif |
| 285 size_t malloc_usable_size(void* ptr) __THROW ALIAS("tc_malloc_usable_size"); |
285 } // extern "C" | 286 } // extern "C" |
286 #else // #if defined(__GNUC__) && !defined(__MACH__) | 287 #else // #if defined(__GNUC__) && !defined(__MACH__) |
287 // Portable wrappers | 288 // Portable wrappers |
288 void* operator new(size_t size) { return tc_new(size); } | 289 void* operator new(size_t size) { return tc_new(size); } |
289 void operator delete(void* p) __THROW { tc_delete(p); } | 290 void operator delete(void* p) __THROW { tc_delete(p); } |
290 void* operator new[](size_t size) { return tc_newarray(size); } | 291 void* operator new[](size_t size) { return tc_newarray(size); } |
291 void operator delete[](void* p) __THROW { tc_deletearray(p); } | 292 void operator delete[](void* p) __THROW { tc_deletearray(p); } |
292 void* operator new(size_t size, const std::nothrow_t& nt) __THROW { | 293 void* operator new(size_t size, const std::nothrow_t& nt) __THROW { |
293 return tc_new_nothrow(size, nt); | 294 return tc_new_nothrow(size, nt); |
294 } | 295 } |
(...skipping 16 matching lines...) Expand all Loading... |
311 void* valloc(size_t s) __THROW { return tc_valloc(s); } | 312 void* valloc(size_t s) __THROW { return tc_valloc(s); } |
312 void* pvalloc(size_t s) __THROW { return tc_pvalloc(s); } | 313 void* pvalloc(size_t s) __THROW { return tc_pvalloc(s); } |
313 int posix_memalign(void** r, size_t a, size_t s) __THROW { | 314 int posix_memalign(void** r, size_t a, size_t s) __THROW { |
314 return tc_posix_memalign(r, a, s); | 315 return tc_posix_memalign(r, a, s); |
315 } | 316 } |
316 void malloc_stats(void) __THROW { tc_malloc_stats(); } | 317 void malloc_stats(void) __THROW { tc_malloc_stats(); } |
317 int mallopt(int cmd, int v) __THROW { return tc_mallopt(cmd, v); } | 318 int mallopt(int cmd, int v) __THROW { return tc_mallopt(cmd, v); } |
318 #ifdef HAVE_STRUCT_MALLINFO | 319 #ifdef HAVE_STRUCT_MALLINFO |
319 struct mallinfo mallinfo(void) __THROW { return tc_mallinfo(); } | 320 struct mallinfo mallinfo(void) __THROW { return tc_mallinfo(); } |
320 #endif | 321 #endif |
| 322 size_t malloc_usable_size(void* p) __THROW { |
| 323 return tc_malloc_usable_size(p); |
| 324 } |
321 } // extern "C" | 325 } // extern "C" |
322 #endif // #if defined(__GNUC__) | 326 #endif // #if defined(__GNUC__) |
323 | 327 |
324 // Some library routines on RedHat 9 allocate memory using malloc() | 328 // Some library routines on RedHat 9 allocate memory using malloc() |
325 // and free it using __libc_free() (or vice-versa). Since we provide | 329 // and free it using __libc_free() (or vice-versa). Since we provide |
326 // our own implementations of malloc/free, we need to make sure that | 330 // our own implementations of malloc/free, we need to make sure that |
327 // the __libc_XXX variants (defined as part of glibc) also point to | 331 // the __libc_XXX variants (defined as part of glibc) also point to |
328 // the same implementations. | 332 // the same implementations. |
329 #ifdef __GLIBC__ // only glibc defines __libc_* | 333 #ifdef __GLIBC__ // only glibc defines __libc_* |
330 extern "C" { | 334 extern "C" { |
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1518 extern "C" PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW { | 1522 extern "C" PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW { |
1519 return do_mallopt(cmd, value); | 1523 return do_mallopt(cmd, value); |
1520 } | 1524 } |
1521 | 1525 |
1522 #ifdef HAVE_STRUCT_MALLINFO | 1526 #ifdef HAVE_STRUCT_MALLINFO |
1523 extern "C" PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW { | 1527 extern "C" PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW { |
1524 return do_mallinfo(); | 1528 return do_mallinfo(); |
1525 } | 1529 } |
1526 #endif | 1530 #endif |
1527 | 1531 |
| 1532 extern "C" PERFTOOLS_DLL_DECL size_t tc_malloc_usable_size(void* ptr) __THROW { |
| 1533 return GetSizeWithCallback(ptr, &InvalidGetAllocatedSize); |
| 1534 } |
| 1535 |
1528 // This function behaves similarly to MSVC's _set_new_mode. | 1536 // This function behaves similarly to MSVC's _set_new_mode. |
1529 // If flag is 0 (default), calls to malloc will behave normally. | 1537 // If flag is 0 (default), calls to malloc will behave normally. |
1530 // If flag is 1, calls to malloc will behave like calls to new, | 1538 // If flag is 1, calls to malloc will behave like calls to new, |
1531 // and the std_new_handler will be invoked on failure. | 1539 // and the std_new_handler will be invoked on failure. |
1532 // Returns the previous mode. | 1540 // Returns the previous mode. |
1533 extern "C" PERFTOOLS_DLL_DECL int tc_set_new_mode(int flag) __THROW { | 1541 extern "C" PERFTOOLS_DLL_DECL int tc_set_new_mode(int flag) __THROW { |
1534 int old_mode = tc_new_mode; | 1542 int old_mode = tc_new_mode; |
1535 tc_new_mode = flag; | 1543 tc_new_mode = flag; |
1536 return old_mode; | 1544 return old_mode; |
1537 } | 1545 } |
(...skipping 11 matching lines...) Expand all Loading... |
1549 __THROW ATTRIBUTE_SECTION(google_malloc); | 1557 __THROW ATTRIBUTE_SECTION(google_malloc); |
1550 | 1558 |
1551 static void *MemalignOverride(size_t align, size_t size, const void *caller) | 1559 static void *MemalignOverride(size_t align, size_t size, const void *caller) |
1552 __THROW { | 1560 __THROW { |
1553 void* result = do_memalign_or_cpp_memalign(align, size); | 1561 void* result = do_memalign_or_cpp_memalign(align, size); |
1554 MallocHook::InvokeNewHook(result, size); | 1562 MallocHook::InvokeNewHook(result, size); |
1555 return result; | 1563 return result; |
1556 } | 1564 } |
1557 void *(*__memalign_hook)(size_t, size_t, const void *) = MemalignOverride; | 1565 void *(*__memalign_hook)(size_t, size_t, const void *) = MemalignOverride; |
1558 #endif // #ifndef TCMALLOC_FOR_DEBUGALLOCATION | 1566 #endif // #ifndef TCMALLOC_FOR_DEBUGALLOCATION |
OLD | NEW |