Le 2011-09-30 à 12:01:00, Mathieu Bouchard a écrit :
size_t real_size (size_t n) {return 1<<highest_bit(n+sizeof(void *));}
erratum :
size_t real_size (size_t n) {return 2<<highest_bit(n+sizeof(void *)-1);}
because the first version I wrote gets the PREVIOUS-or-equal power, which is nonsense. Doubling that gives the NEXT power, but not next-or-equal, so I subtract 1 to compensate for that.
BTW, I haven't looked at modern glibc mallocs. I suspect it might do things similar to the Perl Allocator nowadays, though I have not checked, and it's probably not documented (?). Chances are that it's a different formula, anyway.
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC