reallocing large blocks now doesn't copy if not needed

This commit is contained in:
Jack Jansen 1995-01-22 16:44:49 +00:00
parent 8239f0ffa0
commit f2e5129820
1 changed files with 14 additions and 1 deletions

View File

@ -333,8 +333,21 @@ realloc(cp, nbytes)
*/
expensive = 0;
if ( i == 0xff ) {
expensive = 1;
/* Big block. See if it has to stay big */
if (nbytes+OVERHEAD > MAXMALLOC) {
/* Yup, try to resize it first */
SetPtrSize((Ptr)op, nbytes+OVERHEAD);
if ( MemError() == 0 ) {
#ifdef RCHECK
op->ov_size = (nbytes + RSLOP - 1) & ~(RSLOP - 1);
*(u_short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC;
#endif
return cp;
}
/* Nope, failed. Take the long way */
}
maxsize = GetPtrSize((Ptr)op);
expensive = 1;
} else {
maxsize = 1 << (i+3);
if ( nbytes + OVERHEAD > maxsize )