diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-01-22 16:44:49 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-01-22 16:44:49 (GMT) |
commit | f2e5129820686a2a34eb8a702999c2faf5c178c6 (patch) | |
tree | 24374aea60da55d7a8cb0026efe6fb88496ff0b1 /Mac/mwerks | |
parent | 8239f0ffa0ea6c605144145c6de45bbbb742f598 (diff) | |
download | cpython-f2e5129820686a2a34eb8a702999c2faf5c178c6.zip cpython-f2e5129820686a2a34eb8a702999c2faf5c178c6.tar.gz cpython-f2e5129820686a2a34eb8a702999c2faf5c178c6.tar.bz2 |
reallocing large blocks now doesn't copy if not needed
Diffstat (limited to 'Mac/mwerks')
-rw-r--r-- | Mac/mwerks/malloc/malloc.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/Mac/mwerks/malloc/malloc.c b/Mac/mwerks/malloc/malloc.c index 5b644d7..754b1f7 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 ) |