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