summaryrefslogtreecommitdiff
path: root/zmalloc.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2009-06-04 18:50:54 +0200
committerantirez <antirez@gmail.com>2009-06-04 18:50:54 +0200
commitec93bba353113cb81dc97a738dc94de03f16b143 (patch)
treeebe5006bd3cc60aebe593d0bb4e0b3c5b6281241 /zmalloc.c
parent333298dac3e4b9c147851772be854b5dabcab8c2 (diff)
downloadredis-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.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/zmalloc.c b/zmalloc.c
index c76b2746e..4cb2c53c6 100644
--- a/zmalloc.c
+++ b/zmalloc.c
@@ -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) {