From 96d5009befb03a91da7e418dcc2a689a29ef40a8 Mon Sep 17 00:00:00 2001 From: ceriel Date: Mon, 12 Nov 1990 13:56:38 +0000 Subject: [PATCH] speeded up std_alloc() --- modules/src/alloc/std_alloc.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/modules/src/alloc/std_alloc.c b/modules/src/alloc/std_alloc.c index 381ba4017..ada36f2cb 100644 --- a/modules/src/alloc/std_alloc.c +++ b/modules/src/alloc/std_alloc.c @@ -3,9 +3,10 @@ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". */ -/* st_alloc - get a structure from a free list. If no structures left, +/* std_alloc - get a structure from a free list. If no structures left, create new ones. The counterpart, st_free, is a macro, defined in alloc.h + This is a counting version of st_alloc. */ #include "alloc.h" @@ -17,6 +18,8 @@ std_alloc(phead, size, count, pcnt) int *pcnt; { register char *p; + register long *q; + char *retval; if (*phead == 0) { while (count >= 1 && (p = malloc(size * count)) == 0) { @@ -35,7 +38,25 @@ std_alloc(phead, size, count, pcnt) } else p = *phead; *phead = (char *) (((_PALLOC_) p)->_A_next); - p += size; - while (size--) *--p = 0; - return p; + retval = p; + q = (long *) p; + while (size >= 8*sizeof(long)) { + *q++ = 0; + *q++ = 0; + *q++ = 0; + *q++ = 0; + *q++ = 0; + *q++ = 0; + *q++ = 0; + *q++ = 0; + size -= 8*sizeof(long); + } + while (size >= sizeof(long)) { + *q++ = 0; + size -= sizeof(long); + } + p = (char *) q; + + while (size--) *p++ = 0; + return retval; }