Changeset: efa49c6218dc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=efa49c6218dc
Modified Files:
        gdk/gdk_utils.mx
Branch: Aug2011
Log Message:

Parametrize amount of extra space allocated by GDKmalloc.


diffs (109 lines):

diff --git a/gdk/gdk_utils.mx b/gdk/gdk_utils.mx
--- a/gdk/gdk_utils.mx
+++ b/gdk/gdk_utils.mx
@@ -1143,29 +1143,33 @@ GDKmemfail(str s, size_t len, size_t mem
 #define GLIBC_BUG 0
 #endif
 
+/* we allocate extra space and return a pointer offset by this amount */
+#define MALLOC_EXTRA_SPACE     8
+
 #ifndef GDK_MEM_MISALIGN
 
-/* allocate 8 bytes extra (so it stays 8-bytes aligned) and put realsize in 
front */
+/* allocate 8 bytes extra (so it stays 8-bytes aligned) and put
+ * realsize in front */
 #define GDKmalloc_prefixsize(s,size) {                                 \
-       s = (ssize_t *) malloc(size + 8 + GLIBC_BUG);                   \
+       s = (ssize_t *) malloc(size + MALLOC_EXTRA_SPACE + GLIBC_BUG);  \
        if (s != NULL) {                                                \
                assert((((size_t) s)&7) == 0); /* no MISALIGN */        \
-               s = (ssize_t*) ((char*) s + 8);                         \
-               s[-1] = (ssize_t) (size + 8);                           \
+               s = (ssize_t*) ((char*) s + MALLOC_EXTRA_SPACE);        \
+               s[-1] = (ssize_t) (size + MALLOC_EXTRA_SPACE);          \
        }                                                               \
 }
 
 #else
 /* work around old stupid libc mallocs that give 4-byte aligned pointers */
 #define GDKmalloc_prefixsize(s,size) {                                 \
-       s = (ssize_t *) malloc(size+8);                                 \
+       s = (ssize_t *) malloc(size + MALLOC_EXTRA_SPACE);              \
        if (((size_t) s) & 4) { /* misaligned */                        \
                assert(sizeof(size_t) == 4); /* not on 64-bits */       \
                s = (ssize_t*) ((char*) s + 4);                         \
-               s[-1] = (ssize_t) (size + 9);  /* 1-bit is a marker */  \
+               s[-1] = (ssize_t) (size + MALLOC_EXTRA_SPACE + 1);  /* 1-bit is 
a marker */ \
        } else if (s != NULL) {                                         \
-               s = (ssize_t*) ((char*) s + 8);                         \
-               s[-1] = (ssize_t) (size + 8);                           \
+               s = (ssize_t*) ((char*) s + MALLOC_EXTRA_SPACE);        \
+               s[-1] = (ssize_t) (size + MALLOC_EXTRA_SPACE);          \
        }                                                               \
 }
 #endif
@@ -1222,7 +1226,7 @@ GDKmallocmax(size_t size, size_t *maxsiz
                }
        }
        *maxsize = size;
-       @:heapinc(size+8,s)@
+       @:heapinc(size+MALLOC_EXTRA_SPACE,s)@
        return (void *) s;
 }
 
@@ -1287,14 +1291,14 @@ GDKfree_(void *blk)
                 * when configured with --enable-assert).
                 * Disable at command line using --debug=33554432
                 */
-               DEADBEEFCHK memset(s, 0xDB, size - (8 + (size & 1)));   /* 
0xDeadBeef */
+               DEADBEEFCHK memset(s, 0xDB, size - (MALLOC_EXTRA_SPACE + (size 
& 1)));  /* 0xDeadBeef */
 #endif
 #ifdef GDK_MEM_MISALIGN
                if (size & 1)
                        free(((char *) s) - 4);
                else
 #endif
-                       free(((char *) s) - 8);
+                       free(((char *) s) - MALLOC_EXTRA_SPACE);
                @:heapdec(size,s)@
        }
 }
@@ -1347,13 +1351,13 @@ GDKreallocmax(void *blk, size_t size, si
        }
 #ifndef GDK_MEM_MISALIGN
        else if (size <= GDK_mem_bigsize) {
-               size_t newsize = size + 8;
+               size_t newsize = size + MALLOC_EXTRA_SPACE;
 
                CHKMEM(newsize, 0);
-               blk = realloc(((char *) blk) - 8, newsize + GLIBC_BUG);
+               blk = realloc(((char *) blk) - MALLOC_EXTRA_SPACE, newsize + 
GLIBC_BUG);
                if (blk == NULL) {
                        GDKmemfail("GDKrealloc", newsize, BBPTRIM_ALL, 0);
-                       blk = realloc(((char *) oldblk) - 8, newsize);
+                       blk = realloc(((char *) oldblk) - MALLOC_EXTRA_SPACE, 
newsize);
                        if (blk == NULL) {
                                if (emergency == 0) {
                                        GDKerror("GDKreallocmax: failed for " 
SZFMT " bytes", newsize);
@@ -1366,9 +1370,9 @@ GDKreallocmax(void *blk, size_t size, si
                        }
                }
                if (blk != NULL) {
-                       /* place 8 bytes before it */
+                       /* place MALLOC_EXTRA_SPACE bytes before it */
                        assert((((size_t) blk) & 4) == 0);
-                       blk = ((char *) blk) + 8;
+                       blk = ((char *) blk) + MALLOC_EXTRA_SPACE;
                        ((ssize_t *) blk)[-1] = (ssize_t) newsize;
 
                        /* adapt statistics */
@@ -1385,7 +1389,7 @@ GDKreallocmax(void *blk, size_t size, si
                oldsize = MIN((ssize_t) size, oldsize - 5);
        else
 #endif
-               oldsize = MIN((ssize_t) size, oldsize - 8);
+               oldsize = MIN((ssize_t) size, oldsize - MALLOC_EXTRA_SPACE);
        blk = GDKmallocmax(size, maxsize, emergency);
        if (blk) {
                memcpy(blk, oldblk, oldsize);
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to