Subversion Repositories wimsdev

Rev

Blame | Last modification | View Log | RSS feed

  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.     }
  58.