#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} |
|
|
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 }
|
|
|
Definition at line 38 of file MemMan.cpp. |
|
|
Initial value: Definition at line 40 of file MemMan.cpp. |
|
|
Definition at line 45 of file MemMan.cpp. |
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001