Subversion Repositories wimsdev

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 reyssat 1
 
2
/*** MEMORY.C ***/
3
 
4
#include <stdio.h>
5
#include <stdlib.h>  /* malloc(), exit() */
6
 
7
#include "vdefs.h"
8
 
9
extern int sqrt_nsites, siteidx ;
10
 
11
void
12
freeinit(Freelist * fl, int size)
13
    {
14
    fl->head = (Freenode *)NULL ;
15
    fl->nodesize = size ;
16
    }
17
 
18
char *
19
getfree(Freelist * fl)
20
    {
21
    int i ;
22
    Freenode * t ;
23
    if (fl->head == (Freenode *)NULL)
24
        {
25
        t =  (Freenode *) myalloc(sqrt_nsites * fl->nodesize) ;
26
        for(i = 0 ; i < sqrt_nsites ; i++)
27
            {
28
            makefree((Freenode *)((char *)t+i*fl->nodesize), fl) ;
29
            }
30
        }
31
    t = fl->head ;
32
    fl->head = (fl->head)->nextfree ;
33
    return ((char *)t) ;
34
    }
35
 
36
void
37
makefree(Freenode * curr, Freelist * fl)
38
    {
39
    curr->nextfree = fl->head ;
40
    fl->head = curr ;
41
    }
42
 
43
int total_alloc ;
44
 
45
char *
46
myalloc(unsigned n)
47
    {
48
    char * t ;
49
    if ((t=malloc(n)) == (char *) 0)
50
        {
51
        fprintf(stderr,"Insufficient memory processing site %d (%d bytes in use)\n",
52
        siteidx, total_alloc) ;
53
        exit(0) ;
54
        }
55
    total_alloc += n ;
56
    return (t) ;
57
    }