Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

MemMan.cpp File Reference

#include <stdlib.h>
#include "MemMan.hpp"

Go to the source code of this file.

Functions

char * AllocateBlockRecurs (unsigned char blocksizeidx)

Variables

unsigned long allocatedmemory = 0
unsigned long blocksizes [BLOCKSIZE_NUM]
char * freeblocklists [BLOCKSIZE_NUM] = {NULL,NULL,NULL,NULL}


Function Documentation

char* AllocateBlockRecurs unsigned char    blocksizeidx
 

Definition at line 51 of file MemMan.cpp.

00055 {
00056    char *ptr;
00057 
00058    // Do we have any free block?
00059    if(freeblocklists[blocksizeidx]!=NULL)
00060    {
00061       ptr=freeblocklists[blocksizeidx];
00062       freeblocklists[blocksizeidx]=*(char **)freeblocklists[blocksizeidx];
00063       return ptr;
00064    }
00065    else
00066    {
00067       if(blocksizeidx==BLOCKSIZE_NUM-1)
00068          // Is this the largest possible block size??
00069          // We must allocate new space!
00070       {
00071          ptr=(char *)malloc(blocksizes[blocksizeidx]);
00072          if(ptr==NULL)
00073             ExitNoMem();
00074 
00075          return ptr;
00076       }
00077       else  // If we haven't reached the largest possible block size,
00078             // We allocate a block of the next larger block size
00079             // and use it as a container for our blocks
00080       {
00081          ptr=AllocateBlockRecurs(blocksizeidx+1);
00082 
00083          // We add the new blocks to the free list
00084          char  *ptr1=ptr+blocksizes[blocksizeidx],
00085                *endptr=ptr+blocksizes[blocksizeidx+1];
00086 
00087          do
00088          {
00089             *(char **)ptr1=freeblocklists[blocksizeidx];
00090             freeblocklists[blocksizeidx]=ptr1;
00091 
00092             ptr1+=blocksizes[blocksizeidx];
00093          }
00094          while(ptr1<endptr);
00095 
00096          return ptr;
00097       }
00098    }
00099 }


Variable Documentation

unsigned long allocatedmemory = 0
 

Definition at line 38 of file MemMan.cpp.

unsigned long blocksizes[BLOCKSIZE_NUM]
 

Initial value:

Definition at line 40 of file MemMan.cpp.

char* freeblocklists[BLOCKSIZE_NUM] = {NULL,NULL,NULL,NULL}
 

Definition at line 45 of file MemMan.cpp.


Generated on Sat Oct 13 16:08:49 2001 for XMILL by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001