1 //////////////////////////////////////////////////////////////////////////////
3 //////////////////////////////////////////////////////////////////////////////
10 //////////////////////////////////////////////////////////////////////////////
12 #include "include/memory.h"
14 typedef struct sMemBlockInfo
19 struct sMemBlockInfo *next;
20 struct sMemBlockInfo *prev;
23 sMemBlockInfo memoryInfo;
24 UINT32 memoryMaxAllocated;
25 UINT32 currentAllocatedMemory;
26 UINT32 maximumAllocatedMemory;
28 //////////////////////////////////////////////////////////////////////////////
30 //////////////////////////////////////////////////////////////////////////////
37 //////////////////////////////////////////////////////////////////////////////
38 void memory_addMemInfo(void *ptr, UINT32 size, char *info)
43 while (alias->next) alias=alias->next;
44 alias->next=(sMemBlockInfo*)malloc(sizeof(sMemBlockInfo));
45 if (alias->next==NULL)
50 alias->next->prev=alias;
57 //////////////////////////////////////////////////////////////////////////////
59 //////////////////////////////////////////////////////////////////////////////
66 //////////////////////////////////////////////////////////////////////////////
67 void memory_init(void)
71 currentAllocatedMemory=0;
72 maximumAllocatedMemory=0;
74 //////////////////////////////////////////////////////////////////////////////
76 //////////////////////////////////////////////////////////////////////////////
83 //////////////////////////////////////////////////////////////////////////////
84 void *memory_malloc(UINT32 size, char *info)
88 ptr=(void*)malloc(size);
93 memory_addMemInfo(ptr,size,info);
94 currentAllocatedMemory+=size;
95 if (currentAllocatedMemory>maximumAllocatedMemory)
96 maximumAllocatedMemory=currentAllocatedMemory;
99 //////////////////////////////////////////////////////////////////////////////
101 //////////////////////////////////////////////////////////////////////////////
108 //////////////////////////////////////////////////////////////////////////////
109 void memory_malloc_secure(void **new_ptr, UINT32 size, char *info)
113 fprintf(log_get(),"memory: allocating %i bytes of memory for <%s>...",size,(info==NULL)?"unknown":info);
114 ptr=(void*)malloc(size);
117 fprintf(log_get(),"failed\n");
121 memory_addMemInfo(ptr,size,info);
122 currentAllocatedMemory+=size;
123 if (currentAllocatedMemory>maximumAllocatedMemory)
124 maximumAllocatedMemory=currentAllocatedMemory;
126 fprintf(log_get(),"ok\n");
128 //////////////////////////////////////////////////////////////////////////////
130 //////////////////////////////////////////////////////////////////////////////
134 //////////////////////////////////////////////////////////////////////////////
135 void memory_memoryUsage(FILE *fp)
137 sMemBlockInfo *alias;
140 fprintf(fp,"Memory usage:\n");
145 fprintf(fp,"\t%16i bytes : <%s> (@ 0x%.8x)\n",alias->size,alias->info,alias->ptr);
149 fprintf(fp,"\n\t%16i bytes total(%i Mb)\n",total,(total>>20));
150 fprintf(fp,"\n\t%16i bytes memory peak(%i Mb)\n",maximumAllocatedMemory,maximumAllocatedMemory>>20);
153 //////////////////////////////////////////////////////////////////////////////
155 //////////////////////////////////////////////////////////////////////////////
159 //////////////////////////////////////////////////////////////////////////////
160 void memory_done(void)
163 //////////////////////////////////////////////////////////////////////////////
165 //////////////////////////////////////////////////////////////////////////////
169 //////////////////////////////////////////////////////////////////////////////
170 void memory_free(void *ptr)
172 sMemBlockInfo *alias;
176 while (alias->ptr!=ptr)
179 currentAllocatedMemory-=alias->size;
180 alias->prev->next=alias->next;
181 if (alias->next!=NULL)
182 alias->next->prev=alias->prev;