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