+2006-08-21 Ulrich Drepper <drepper@redhat.com>
+
+ * malloc/malloc.c (DEFAULT_MMAP_THRESHOLD_MAX): For 32-bit
+ platforms define as 1MB. For 64-bit platforms as 32MB. The lower
+ limit is needed to avoid the exploding of the address space
+ requirement for secondary heaps.
+ * malloc/arena.c (HEAP_MAX_SIZE): Define using
+ DEFAULT_MMAP_THRESHOLD_MAX if it is defined.
+
2006-07-30 Joseph S. Myers <joseph@codesourcery.com>
[BZ #3018]
#define HEAP_MIN_SIZE (32*1024)
#ifndef HEAP_MAX_SIZE
-#define HEAP_MAX_SIZE (1024*1024) /* must be a power of two */
+# ifdef DEFAULT_MMAP_THRESHOLD_MAX
+# define HEAP_MAX_SIZE DEFAULT_MMAP_THRESHOLD_MAX
+# else
+# define HEAP_MAX_SIZE (1024*1024) /* must be a power of two */
+# endif
#endif
/* HEAP_MIN_SIZE and HEAP_MAX_SIZE limit the size of mmap()ed heaps
#ifdef _LIBC
#include <stdio-common/_itoa.h>
+#include <bits/wordsize.h>
#endif
#ifdef __cplusplus
#endif
#ifndef DEFAULT_MMAP_THRESHOLD_MAX
-#define DEFAULT_MMAP_THRESHOLD_MAX (8 * 1024 * 1024 * sizeof(long))
+ /* For 32-bit platforms we cannot increase the maximum mmap
+ threshold much because it is also the minimum value for the
+ maximum heap size and its alignment. Going above 1MB wastes too
+ much address space. */
+# if __WORDSIZE == 32
+# define DEFAULT_MMAP_THRESHOLD_MAX (1024 * 1024)
+# else
+# define DEFAULT_MMAP_THRESHOLD_MAX (8 * 1024 * 1024 * sizeof(long))
+# endif
#endif
/*
char* mm; /* return value from mmap call*/
+ try_mmap:
/*
Round up size to nearest page. For mmapped chunks, the overhead
is one SIZE_SZ unit larger than for normal chunks, because there
set_foot(old_top, (old_size + 2*SIZE_SZ));
}
}
+ else
+ /* We can at least try to use to mmap memory. */
+ goto try_mmap;
} else { /* av == main_arena */