? a.out ? o ? x.c Index: xmalloc.c =================================================================== RCS file: /cvsroot/src/libexec/ld.elf_so/xmalloc.c,v retrieving revision 1.10 diff -u -u -r1.10 xmalloc.c --- xmalloc.c 3 Dec 2010 23:07:49 -0000 1.10 +++ xmalloc.c 25 May 2011 14:32:11 -0000 @@ -148,6 +148,7 @@ static size_t pagesz; /* page size */ static size_t pagebucket; /* page size bucket */ +static size_t pageshift; /* page size shift */ #ifdef MSTATS /* @@ -203,6 +204,8 @@ bucket++; } pagebucket = bucket; + for (pageshift = 0, m = pagesz; m != 1; pageshift++, m >>= 1) + continue; } /* * Convert amount of memory requested into closest block size @@ -277,13 +280,13 @@ #endif if (sz < pagesz) { amt = pagesz; - nblks = amt / sz; + nblks = amt >> (bucket + 3); } else { amt = sz + pagesz; nblks = 1; } if (amt > PAGEPOOL_SIZE) - if (morepages(amt/pagesz + NPOOLPAGES) == 0) + if (morepages((amt >> pageshift) + NPOOLPAGES) == 0) return; op = (union overhead *)pagepool_start; pagepool_start += amt;