1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

* 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.
This commit is contained in:
Ulrich Drepper
2006-08-22 06:19:12 +00:00
parent 376e973ad6
commit e404fb16fc
3 changed files with 28 additions and 2 deletions

View File

@ -259,6 +259,7 @@
#ifdef _LIBC
#include <stdio-common/_itoa.h>
#include <bits/wordsize.h>
#endif
#ifdef __cplusplus
@ -1424,7 +1425,15 @@ int __posix_memalign(void **, size_t, size_t);
#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
/*
@ -2867,6 +2876,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
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
@ -2996,6 +3006,9 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
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 */