65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#include "heap4_common.h"
|
|
|
|
volatile size_t g_free_total;
|
|
volatile size_t g_largest_free;
|
|
volatile int g_node_count;
|
|
|
|
static size_t list_total(HeapBlock *start)
|
|
{
|
|
HeapBlock *block;
|
|
size_t total;
|
|
|
|
total = 0U;
|
|
for (block = start->next; block != 0; block = block->next)
|
|
total += block->size;
|
|
return total;
|
|
}
|
|
|
|
static size_t list_largest(HeapBlock *start)
|
|
{
|
|
HeapBlock *block;
|
|
size_t largest;
|
|
|
|
largest = 0U;
|
|
for (block = start->next; block != 0; block = block->next)
|
|
if (block->size > largest)
|
|
largest = block->size;
|
|
return largest;
|
|
}
|
|
|
|
static int list_count(HeapBlock *start)
|
|
{
|
|
HeapBlock *block;
|
|
int count;
|
|
|
|
count = 0;
|
|
for (block = start->next; block != 0; block = block->next)
|
|
count++;
|
|
return count;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
HeapBlock start;
|
|
HeapBlock a;
|
|
HeapBlock b;
|
|
HeapBlock c;
|
|
|
|
start.next = &a;
|
|
start.size = 0U;
|
|
a.next = &b;
|
|
a.size = 32U;
|
|
b.next = &c;
|
|
b.size = 80U;
|
|
c.next = 0;
|
|
c.size = 24U;
|
|
|
|
g_free_total = list_total(&start);
|
|
g_largest_free = list_largest(&start);
|
|
g_node_count = list_count(&start);
|
|
|
|
TRACE_PRINTF("free=%u largest=%u count=%d\n",
|
|
(unsigned)g_free_total, (unsigned)g_largest_free, g_node_count);
|
|
return 0;
|
|
}
|