From: Jack Jansen Date: Sun, 22 Jan 1995 16:44:49 +0000 (+0000) Subject: reallocing large blocks now doesn't copy if not needed X-Git-Tag: v1.2b3~120 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f2e5129820686a2a34eb8a702999c2faf5c178c6;p=thirdparty%2FPython%2Fcpython.git reallocing large blocks now doesn't copy if not needed --- diff --git a/Mac/mwerks/malloc/malloc.c b/Mac/mwerks/malloc/malloc.c index 5b644d7ce427..754b1f7b7e54 100644 --- a/Mac/mwerks/malloc/malloc.c +++ b/Mac/mwerks/malloc/malloc.c @@ -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 )