mailing list of musl libc
 help / color / mirror / code / Atom feed
* unneeded mremap calls in realloc
@ 2011-11-16  0:45 Szabolcs Nagy
  2011-11-17  2:50 ` Rich Felker
  2011-11-17  5:02 ` Rich Felker
  0 siblings, 2 replies; 4+ messages in thread
From: Szabolcs Nagy @ 2011-11-16  0:45 UTC (permalink / raw)
  To: musl


as discussed on irc, in realloc there is a mremap
where newlen is pagesize adjusted but oldlen is not
so oldlen==newlen almost always fails

run this simple test case with strace to see the issue:

#include <stdlib.h>
int main(){
	char *p = 0;
	int n;

	for (n = 0; n < 500000; n++)
		p = realloc(p, n);
	free(p);
	return 0;
}

the fix that significantly speeds up the above code:
(there might be better fix, eg why oldlen is not a
multiple of pagesize in the first place?)

diff --git a/src/malloc/malloc.c b/src/malloc/malloc.c
index abf3e8f..8e9b022 100644
--- a/src/malloc/malloc.c
+++ b/src/malloc/malloc.c
@@ -401,7 +401,7 @@ void *realloc(void *p, size_t n)
                        return new;
                }
                newlen = (newlen + PAGE_SIZE-1) & -PAGE_SIZE;
-               if (oldlen == newlen) return p;
+               if (((oldlen + PAGE_SIZE-1) & -PAGE_SIZE) == newlen) return p;
                base = __mremap(base, oldlen, newlen, MREMAP_MAYMOVE);
                if (base == (void *)-1)
                        return newlen < oldlen ? p : 0;


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-11-17 12:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-16  0:45 unneeded mremap calls in realloc Szabolcs Nagy
2011-11-17  2:50 ` Rich Felker
2011-11-17  5:02 ` Rich Felker
2011-11-17 12:31   ` Szabolcs Nagy

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).