]>
git.saurik.com Git - redis.git/blob - src/zmalloc.h
14e79534e17dccd455975e1e328d59741aecb5ca
   1 /* zmalloc - total amount of allocated memory aware version of malloc() 
   3  * Copyright (c) 2009-2010, Salvatore Sanfilippo <antirez at gmail dot com> 
   6  * Redistribution and use in source and binary forms, with or without 
   7  * modification, are permitted provided that the following conditions are met: 
   9  *   * Redistributions of source code must retain the above copyright notice, 
  10  *     this list of conditions and the following disclaimer. 
  11  *   * Redistributions in binary form must reproduce the above copyright 
  12  *     notice, this list of conditions and the following disclaimer in the 
  13  *     documentation and/or other materials provided with the distribution. 
  14  *   * Neither the name of Redis nor the names of its contributors may be used 
  15  *     to endorse or promote products derived from this software without 
  16  *     specific prior written permission. 
  18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
  19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  21  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
  22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
  24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
  26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  28  * POSSIBILITY OF SUCH DAMAGE. 
  34 /* Double expansion needed for stringification of macro values. */ 
  35 #define __xstr(s) __str(s) 
  38 #if defined(USE_TCMALLOC) 
  39 #define ZMALLOC_LIB ("tcmalloc-" __xstr(TC_VERSION_MAJOR) "." __xstr(TC_VERSION_MINOR)) 
  40 #include <google/tcmalloc.h> 
  41 #if (TC_VERSION_MAJOR == 1 && TC_VERSION_MINOR >= 6) || (TC_VERSION_MAJOR > 1) 
  42 #define HAVE_MALLOC_SIZE 1 
  43 #define zmalloc_size(p) tc_malloc_size(p) 
  45 #error "Newer version of tcmalloc required" 
  48 #elif defined(USE_JEMALLOC) 
  49 #define ZMALLOC_LIB ("jemalloc-" __xstr(JEMALLOC_VERSION_MAJOR) "." __xstr(JEMALLOC_VERSION_MINOR) "." __xstr(JEMALLOC_VERSION_BUGFIX)) 
  50 #include <jemalloc/jemalloc.h> 
  51 #if (JEMALLOC_VERSION_MAJOR == 2 && JEMALLOC_VERSION_MINOR >= 1) || (JEMALLOC_VERSION_MAJOR > 2) 
  52 #define HAVE_MALLOC_SIZE 1 
  53 #define zmalloc_size(p) je_malloc_usable_size(p) 
  55 #error "Newer version of jemalloc required" 
  58 #elif defined(__APPLE__) 
  59 #include <malloc/malloc.h> 
  60 #define HAVE_MALLOC_SIZE 1 
  61 #define zmalloc_size(p) malloc_size(p) 
  65 #define ZMALLOC_LIB "libc" 
  68 void *zmalloc(size_t size
); 
  69 void *zcalloc(size_t size
); 
  70 void *zrealloc(void *ptr
, size_t size
); 
  71 void zfree(void *ptr
); 
  72 char *zstrdup(const char *s
); 
  73 size_t zmalloc_used_memory(void); 
  74 void zmalloc_enable_thread_safeness(void); 
  75 void zmalloc_set_oom_handler(void (*oom_handler
)(size_t)); 
  76 float zmalloc_get_fragmentation_ratio(void); 
  77 size_t zmalloc_get_rss(void); 
  78 void zlibc_free(void *ptr
); 
  80 #ifndef HAVE_MALLOC_SIZE 
  81 size_t zmalloc_size(void *ptr
); 
  84 #endif /* __ZMALLOC_H */