diff options
Diffstat (limited to 'src/mem.c')
| -rw-r--r-- | src/mem.c | 57 |
1 files changed, 29 insertions, 28 deletions
@@ -48,7 +48,7 @@ #include <rtthread.h> /* #define RT_MEM_DEBUG */ -#define RT_MEM_STATS
+#define RT_MEM_STATS #if defined (RT_USING_HEAP) && defined (RT_USING_SMALL_MEM) #ifdef RT_USING_HOOK @@ -109,11 +109,11 @@ static struct heap_mem *heap_end; static struct heap_mem *lfree; /* pointer to the lowest free block */ static struct rt_semaphore heap_sem; -static rt_size_t mem_size_aligned;
-
+static rt_size_t mem_size_aligned; + #ifdef RT_MEM_STATS -static rt_size_t used_mem, max_mem;
-#endif
+static rt_size_t used_mem, max_mem; +#endif static void plug_holes(struct heap_mem *mem) { @@ -194,7 +194,7 @@ void rt_system_heap_init(void* begin_addr, void* end_addr) rt_sem_init(&heap_sem, "heap", 1, RT_IPC_FLAG_FIFO); /* initialize the lowest-free pointer to the start of the heap */ - lfree = (struct heap_mem *)heap_ptr;
+ lfree = (struct heap_mem *)heap_ptr; } /** @@ -277,10 +277,10 @@ void *rt_malloc(rt_size_t size) if (mem2->next != mem_size_aligned) { ((struct heap_mem *)&heap_ptr[mem2->next])->prev = ptr2; - }
-#ifdef RT_MEM_STATS
- used_mem += (size + SIZEOF_STRUCT_MEM);
- if (max_mem < used_mem) max_mem = used_mem;
+ } +#ifdef RT_MEM_STATS + used_mem += (size + SIZEOF_STRUCT_MEM); + if (max_mem < used_mem) max_mem = used_mem; #endif } else @@ -292,10 +292,10 @@ void *rt_malloc(rt_size_t size) * also can't move mem->next directly behind mem, since mem->next * will always be used at this point! */ - mem->used = 1;
-#ifdef RT_MEM_STATS
- used_mem += mem->next - ((rt_uint8_t*)mem - heap_ptr);
- if (max_mem < used_mem) max_mem = used_mem;
+ mem->used = 1; +#ifdef RT_MEM_STATS + used_mem += mem->next - ((rt_uint8_t*)mem - heap_ptr); + if (max_mem < used_mem) max_mem = used_mem; #endif } @@ -342,6 +342,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize) rt_size_t size; rt_size_t ptr, ptr2; struct heap_mem *mem, *mem2; + void* nmem; /* alignment size */ newsize = RT_ALIGN(newsize, RT_ALIGN_SIZE); @@ -369,10 +370,10 @@ void *rt_realloc(void *rmem, rt_size_t newsize) size = mem->next - ptr - SIZEOF_STRUCT_MEM; if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE < size) - {
-#if MEM_STATS
- used_mem -= (size - newsize);
-#endif /* MEM_STATS */
+ { +#if MEM_STATS + used_mem -= (size - newsize); +#endif /* MEM_STATS */ ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; mem2 = (struct heap_mem *)&heap_ptr[ptr2]; @@ -394,12 +395,12 @@ void *rt_realloc(void *rmem, rt_size_t newsize) rt_sem_release(&heap_sem); /* expand memory */ - mem2 = rt_malloc(newsize); - rt_memcpy(mem2, mem, size); + nmem = rt_malloc(newsize); + rt_memcpy(nmem, rmem, size); - rt_free(mem); + rt_free(rmem); - return mem2; + return nmem; } /** @@ -475,16 +476,16 @@ void rt_free(void *rmem) { /* the newly freed struct is now the lowest */ lfree = mem; - }
+ } -#ifdef RT_MEM_STATS
- used_mem -= (mem->next - ((rt_uint8_t*)mem - heap_ptr));
-#endif
+#ifdef RT_MEM_STATS + used_mem -= (mem->next - ((rt_uint8_t*)mem - heap_ptr)); +#endif /* finally, see if prev or next are free also */ plug_holes(mem); rt_sem_release(&heap_sem); -}
+} #ifdef RT_MEM_STATS #ifdef RT_USING_FINSH @@ -497,7 +498,7 @@ void list_mem() } FINSH_FUNCTION_EXPORT(list_mem, list memory usage information) #endif -#endif
+#endif /*@}*/ |
