Try to allocate to the next power of 2, instead of just aligning
with GRABSIZE; This way, malloc(1000000) followed by free() followed by another malloc(1000000) will result in the same block being allocated, because first_present will now find it
This commit is contained in:
parent
7161d59956
commit
5a4933ff7f
|
@ -67,10 +67,10 @@ malloc(n)
|
|||
assert(n1 < (1 << LOG_MAX_SIZE));
|
||||
min_class = 0;
|
||||
|
||||
while (n1 >= MIN_SIZE) {
|
||||
do {
|
||||
n1 >>= 1;
|
||||
min_class++;
|
||||
}
|
||||
} while (n1 >= MIN_SIZE);
|
||||
}
|
||||
|
||||
if (min_class >= MAX_FLIST)
|
||||
|
@ -81,7 +81,8 @@ malloc(n)
|
|||
register char *p;
|
||||
#define GRABSIZE 4096 /* Power of 2 */
|
||||
register unsigned int req =
|
||||
(n+mallink_size()+GRABSIZE-1)&~(GRABSIZE-1);
|
||||
((MIN_SIZE<<min_class)+ mallink_size() + GRABSIZE - 1) &
|
||||
~(GRABSIZE-1);
|
||||
|
||||
if (!ml_last) {
|
||||
/* first align SBRK() */
|
||||
|
|
Loading…
Reference in a new issue