1// Copyright 2014 The Android Open Source Project
2//
3// This software is licensed under the terms of the GNU General Public
4// License version 2, as published by the Free Software Foundation, and
5// may be copied, distributed, and modified under those terms.
6//
7// This program is distributed in the hope that it will be useful,
8// but WITHOUT ANY WARRANTY; without even the implied warranty of
9// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10// GNU General Public License for more details.
11
12#ifndef ANDROID_BASE_MEMORY_MALLOC_USABLE_SIZE_H
13#define ANDROID_BASE_MEMORY_MALLOC_USABLE_SIZE_H
14
15// Define HAVE_MALLOC_USABLE_SIZE to 1 to indicate that the current
16// system has malloc_usable_size(). Which takes the address of a malloc-ed
17// pointer, and return the size of the underlying storage block.
18// This is useful to optimize heap memory usage.
19
20// Including at least one C library header is required to define symbols
21// like __GLIBC__. Choose carefully because some headers like <stddef.h>
22// are actually provided by the compiler, not the C library and do not
23// define the macros we need.
24#include <stdint.h>
25
26#if defined(__GLIBC__)
27#  include <malloc.h>
28#  define USE_MALLOC_USABLE_SIZE  1
29#elif defined(__APPLE__) || defined(__FreeBSD__)
30#  include <malloc/malloc.h>
31#  define malloc_usable_size  malloc_size
32#  define USE_MALLOC_USABLE_SIZE  1
33#else
34#  define USE_MALLOC_USABLE_SIZE  0
35#endif
36
37#endif  // ANDROID_BASE_MEMORY_MALLOC_USABLE_SIZE_H
38