diff options
author | antirez <antirez@gmail.com> | 2009-06-04 18:50:54 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2009-06-04 18:50:54 +0200 |
commit | ec93bba353113cb81dc97a738dc94de03f16b143 (patch) | |
tree | ebe5006bd3cc60aebe593d0bb4e0b3c5b6281241 /zmalloc.c | |
parent | 333298dac3e4b9c147851772be854b5dabcab8c2 (diff) | |
download | redis-ec93bba353113cb81dc97a738dc94de03f16b143.tar.gz |
macosx specific zmalloc.c, uses malloc_size function in order to avoid to waste memory and time to put an additional header
Diffstat (limited to 'zmalloc.c')
-rw-r--r-- | zmalloc.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -31,23 +31,45 @@ #include <stdlib.h> #include <string.h> +#ifdef __APPLE__ +#include <malloc/malloc.h> +#define HAVE_MALLOC_SIZE +#define redis_malloc_size(p) malloc_size(p) +#endif + static size_t used_memory = 0; void *zmalloc(size_t size) { void *ptr = malloc(size+sizeof(size_t)); if (!ptr) return NULL; +#ifdef HAVE_MALLOC_SIZE + used_memory += redis_malloc_size(ptr); + return ptr; +#else *((size_t*)ptr) = size; used_memory += size+sizeof(size_t); return (char*)ptr+sizeof(size_t); +#endif } void *zrealloc(void *ptr, size_t size) { +#ifndef HAVE_MALLOC_SIZE void *realptr; +#endif size_t oldsize; void *newptr; if (ptr == NULL) return zmalloc(size); +#ifdef HAVE_MALLOC_SIZE + oldsize = redis_malloc_size(ptr); + newptr = realloc(ptr,size); + if (!newptr) return NULL; + + used_memory -= oldsize; + used_memory += redis_malloc_size(newptr); + return newptr; +#else realptr = (char*)ptr-sizeof(size_t); oldsize = *((size_t*)realptr); newptr = realloc(realptr,size+sizeof(size_t)); @@ -57,17 +79,25 @@ void *zrealloc(void *ptr, size_t size) { used_memory -= oldsize; used_memory += size; return (char*)newptr+sizeof(size_t); +#endif } void zfree(void *ptr) { +#ifndef HAVE_MALLOC_SIZE void *realptr; size_t oldsize; +#endif if (ptr == NULL) return; +#ifdef HAVE_MALLOC_SIZE + used_memory -= redis_malloc_size(ptr); + free(ptr); +#else realptr = (char*)ptr-sizeof(size_t); oldsize = *((size_t*)realptr); used_memory -= oldsize+sizeof(size_t); free(realptr); +#endif } char *zstrdup(const char *s) { |