提交 bf878582 编写于 作者: R Rich Felker

avoid over-allocation of brk on first malloc

if init_malloc returns positive (successful first init), malloc will
retry getting a chunk from the free bins rather than expanding the
heap again. also pass init_malloc a hint for the size of the initial
allocation.
上级 952987a0
......@@ -179,7 +179,7 @@ fail:
return 0;
}
static int init_malloc()
static int init_malloc(size_t n)
{
static int init, waiters;
int state;
......@@ -196,7 +196,7 @@ static int init_malloc()
mal.brk = __brk(0) + 2*SIZE_ALIGN-1 & -SIZE_ALIGN;
c = expand_heap(1);
c = expand_heap(n);
if (!c) {
a_store(&init, 0);
......@@ -210,7 +210,7 @@ static int init_malloc()
a_store(&init, 2);
if (waiters) __wake(&init, -1, 1);
return 0;
return 1;
}
static int adjust_size(size_t *n)
......@@ -347,7 +347,7 @@ void *malloc(size_t n)
for (;;) {
uint64_t mask = mal.binmap & -(1ULL<<i);
if (!mask) {
init_malloc();
if (init_malloc(n) > 0) continue;
c = expand_heap(n);
if (!c) return 0;
if (alloc_rev(c)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册