ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/bmalloc.c
Revision: 1.2
Committed: Tue Sep 25 19:37:15 1990 UTC (33 years, 7 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.1: +8 -3 lines
Log Message:
improved test for deferring to malloc

File Contents

# User Rev Content
1 greg 1.1 /* Copyright (c) 1990 Regents of the University of California */
2    
3     #ifndef lint
4     static char SCCSid[] = "$SunId$ LBL";
5     #endif
6    
7     /*
8 greg 1.2 * Basic memory allocation w/o overhead.
9     * Calls malloc(3) for big requests.
10 greg 1.1 *
11     */
12    
13 greg 1.2 #define NULL 0
14    
15 greg 1.1 #ifndef MBLKSIZ
16     #define MBLKSIZ 16376 /* size of memory allocation block */
17     #endif
18 greg 1.2 #define WASTEFRAC 4 /* don't waste more than this */
19 greg 1.1 #ifndef ALIGN
20     #define ALIGN int /* type for alignment */
21     #endif
22     #define BYTES_WORD sizeof(ALIGN)
23    
24    
25     char *
26     bmalloc(n) /* allocate a block of n bytes, no refunds */
27     register unsigned n;
28     {
29 greg 1.2 extern char *malloc();
30 greg 1.1 static char *bpos = NULL;
31     static unsigned nrem = 0;
32    
33 greg 1.2 if (n > nrem && (n > MBLKSIZ || nrem > MBLKSIZ/WASTEFRAC))
34     return(malloc(n)); /* too big */
35 greg 1.1
36     n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1); /* word align */
37    
38     if (n > nrem) {
39     if ((bpos = malloc((unsigned)MBLKSIZ)) == NULL) {
40     nrem = 0;
41     return(NULL);
42     }
43     nrem = MBLKSIZ;
44     }
45     bpos += n;
46     nrem -= n;
47     return(bpos - n);
48     }
49    
50    
51     bfree(p, n) /* free random memory */
52     char *p;
53     unsigned n;
54     {
55     /* not implemented */
56     }