diff options
Diffstat (limited to 'libc/stdlib')
-rw-r--r-- | libc/stdlib/malloc/malloc.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/libc/stdlib/malloc/malloc.c b/libc/stdlib/malloc/malloc.c index db953a9c0..b2fb6677b 100644 --- a/libc/stdlib/malloc/malloc.c +++ b/libc/stdlib/malloc/malloc.c @@ -45,9 +45,11 @@ malloc (size_t size) __malloc_lock (); + /* First try to get memory that's already in our heap. */ mem = __heap_alloc (heap, &size); - if (! mem) - /* We couldn't allocate from the heap, so get some more memory + + if (__malloc_unlikely (! mem)) + /* We couldn't allocate from the heap, so grab some more from the system, add it to the heap, and try again. */ { /* If we're trying to allocate a block bigger than the default @@ -74,7 +76,7 @@ malloc (size_t size) /* Use sbrk we can, as it's faster than mmap, and guarantees contiguous allocation. */ block = sbrk (block_size); - if (block != (void *)-1) + if (__malloc_likely (block != (void *)-1)) { /* Because sbrk can return results of arbitrary alignment, align the result to a MALLOC_ALIGNMENT boundary. */ @@ -103,7 +105,7 @@ malloc (size_t size) /* Get back the main lock. */ __malloc_lock (); - if (block != (void *)-1) + if (__malloc_likely (block != (void *)-1)) { MALLOC_DEBUG (" adding memory: 0x%lx - 0x%lx (%d bytes)\n", (long)block, (long)block + block_size, block_size); @@ -118,7 +120,7 @@ malloc (size_t size) __malloc_unlock (); - if (mem) + if (__malloc_likely (mem)) /* Record the size of this block. */ { mem = MALLOC_ADDR (mem); |