diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2004-01-08 15:43:37 +0000 |
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2004-01-08 15:43:37 +0000 |
| commit | e11a1e29dff621cd1a9c1640732766ec87fc2726 (patch) | |
| tree | 6d6ef7b62412cd1340ac51bbc51fcad389994d89 | |
| parent | 21fba08fc3a66c7f395b2a95b3e6dd3dfd9c8002 (diff) | |
| download | rockbox-e11a1e29dff621cd1a9c1640732766ec87fc2726.zip rockbox-e11a1e29dff621cd1a9c1640732766ec87fc2726.tar.gz rockbox-e11a1e29dff621cd1a9c1640732766ec87fc2726.tar.bz2 rockbox-e11a1e29dff621cd1a9c1640732766ec87fc2726.tar.xz | |
malloc is not used in Rockbox
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4210 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/test/malloc/Makefile | 36 | ||||
| -rw-r--r-- | firmware/test/malloc/Malloc.c | 196 | ||||
| -rw-r--r-- | firmware/test/malloc/dmytest.c | 173 | ||||
| -rw-r--r-- | firmware/test/malloc/mytest.c | 70 |
4 files changed, 0 insertions, 475 deletions
diff --git a/firmware/test/malloc/Makefile b/firmware/test/malloc/Makefile deleted file mode 100644 index c7fdedb..0000000 --- a/firmware/test/malloc/Makefile +++ /dev/null @@ -1,36 +0,0 @@ - -OBJS1 = mytest.o -TARGET1 = mytest - -OBJS2 = Malloc.o -TARGET2 = mtest - -OBJS3 = dmytest.o -TARGET3 = dmytest - -# define this to talk a lot in runtime -# -DDEBUG_VERBOSE -CFLAGS = -g -Wall -DDEBUG -I../../malloc -CC = gcc -AR = ar - -LDFLAGS = -L../../malloc -ldmalloc - -all: $(TARGET1) $(TARGET2) $(TARGET3) - -clean: - rm -f core *~ $(TARGET1) $(TARGET2) $(TARGET3) \ - $(OBJS1) $(OBJS2) $(OBJS3) - -$(TARGET1): $(OBJS1) - $(CC) -g -o $(TARGET1) $(OBJS1) $(LDFLAGS) - -$(TARGET2): $(OBJS2) - $(CC) -g -o $(TARGET2) $(OBJS2) $(LDFLAGS) - -$(TARGET3): $(OBJS3) - $(CC) -g -o $(TARGET3) $(OBJS3) $(LDFLAGS) - -dmytest.o: dmytest.c -Malloc.o: Malloc.c -mytest.o: mytest.c diff --git a/firmware/test/malloc/Malloc.c b/firmware/test/malloc/Malloc.c deleted file mode 100644 index 63239fe..0000000 --- a/firmware/test/malloc/Malloc.c +++ /dev/null @@ -1,196 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> - -/* Storleken på allokeringen bestäms genom att först slumpas en position i -"size_table" ut, sedan slumpas en storlek mellan den postionen och nästa värde -i tabellen. Genom att ha tabellen koncentrerad med låga värden, så skapas -flest såna. Rutinen håller på tills minnet en allokeringen nekas. Den kommer -aldrig att ha mer än MAXIMAL_MEMORY_TO_ALLOCATE allokerat samtidigt. Maximalt -har den MAX_ALLOCATIONS allokeringar samtidigt. - -Statistiskt sätt så kommer efter ett tag MAX_ALLOCATIONS/2 allokeringar finnas -samtidigt, med varje allokering i median med värdet av halva "size_table". - -När minnet är slut (malloc()=NULL), frågas användaren om han ska fortsätta. - -Med jämna mellanrum skrivs statisktik ut på skärmen. (DISPLAY_WHEN) - -För att stressa systemet med fler små allokeringar, så kan man öka -MAX_ALLOCATIONS. AMOUNT_OF_MEMORY bör få den att slå i taket fortare om man -minskar det. - -Ingen initiering görs av slumptalen, så allt är upprepbart (men plocka bort -kommentaren på srand() och det löser sig. - -*/ - -#define BMALLOC /* go go go */ - -#ifdef BMALLOC -#include "dmalloc.h" - -#include "bmalloc.h" -#endif - -#define MAX_ALLOCATIONS 100000 -#define AMOUNT_OF_MEMORY 100000 /* bytes */ -#define MAXIMAL_MEMORY_TO_ALLOCATE 49000 /* Sätt den här högre än - AMOUNT_OF_MEMORY, och malloc() bör - returnera NULL förr eller senare */ - -#define DISPLAY_WHEN (10000) /* When to display statistic */ - -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define BOOL char -#define TRUE 1 -#define FALSE 0 - -typedef struct { - char *memory; - long size; - char filled_with; - long table_position; -} MallocStruct; - -/* -Skapar en lista med MAX_ALLOCATIONS storlek där det slumpvis allokeras -eller reallokeras i. -*/ - -MallocStruct my_mallocs[MAX_ALLOCATIONS]; - -long size_table[]={5,8,10,11,12,14,16,18,20,26,33,50,70,90,120,150,200,400,800,1000,2000,4000,8000}; -#define TABLESIZE ((sizeof(size_table)-1)/sizeof(long)) -long size_allocs[TABLESIZE]; - -int main(void) -{ - long count=-1; - long count_free=0, count_malloc=0, count_realloc=0; - long total_memory=0; - long out_of_memory=FALSE; - - dmalloc_initialize(); - -#ifdef BMALLOC - void *thisisourheap; - thisisourheap = (malloc)(AMOUNT_OF_MEMORY); - if(!thisisourheap) - return -1; /* can't get memory */ - bmalloc_add_pool(thisisourheap, AMOUNT_OF_MEMORY); -#endif - - srand( 0 ); /* Initialize to a fixed random */ - - while (!out_of_memory) { - long number=rand()%MAX_ALLOCATIONS; - long size; - long table_position=rand()%TABLESIZE; - char fill_with=rand()&255; - - count++; - - size=rand()%(size_table[table_position+1]- - size_table[table_position])+ - size_table[table_position]; - -/* fprintf(stderr, "number %d size %d\n", number, size); */ - - if (my_mallocs[number].size) { /* Om allokering redan finns på den här - positionen, så reallokerar vi eller - friar. */ - long old_size=my_mallocs[number].size; - if (my_mallocs[number].size && fill_with<40) { - free(my_mallocs[number].memory); - total_memory -= my_mallocs[number].size; - count_free++; - size_allocs[my_mallocs[number].table_position]--; - size=0; - } else { - /* - * realloc() part - * - */ - char *temp; -#if 0 - if(my_mallocs[number].size > size) { - printf("*** %d is realloc()ed to %d\n", - my_mallocs[number].size, size); - } -#endif - if (total_memory-old_size+size>MAXIMAL_MEMORY_TO_ALLOCATE) - goto output; /* for-loop */ - temp = (char *)realloc(my_mallocs[number].memory, size); - if (!temp) - out_of_memory=size; - else { - my_mallocs[number].memory = temp; - - my_mallocs[number].size=size; - size_allocs[my_mallocs[number].table_position]--; - size_allocs[table_position]++; - total_memory -= old_size; - total_memory += size; - old_size=min(old_size, size); - while (--old_size>0) { - if (my_mallocs[number].memory[old_size]!=my_mallocs[number].filled_with) - fprintf(stderr, "Wrong filling!\n"); - } - count_realloc++; - } - } - } else { - if (total_memory+size>MAXIMAL_MEMORY_TO_ALLOCATE) { - goto output; /* for-loop */ - } - my_mallocs[number].memory=(char *)malloc(size); /* Allokera! */ - if (!my_mallocs[number].memory) - out_of_memory=size; - else { - size_allocs[table_position]++; - count_malloc++; - total_memory += size; - } - } - if(!out_of_memory) { - my_mallocs[number].table_position=table_position; - my_mallocs[number].size=size; - my_mallocs[number].filled_with=fill_with; - memset(my_mallocs[number].memory, fill_with, size); - } - output: - if (out_of_memory || !(count%DISPLAY_WHEN)) { - printf("(%ld) malloc %ld, realloc %ld, free %ld, total size %ld\n", - count, count_malloc, count_realloc, count_free, total_memory); - { - int count; - printf("[size bytes]=[number of allocations]\n"); - for (count=0; count<TABLESIZE; count++) { - printf(" %ld=%ld\n", size_table[count], size_allocs[count]); - } - printf("\n\n"); - } - } - if (out_of_memory) { - if(out_of_memory) - printf("Couldn't get %ld bytes\n", out_of_memory); - - dmalloc_status(); - bmalloc_status(); - - fprintf(stderr, "Memory is out! Continue (y/n)"); - switch (getchar()) { - case 'y': - case 'Y': - out_of_memory=FALSE; - break; - } - fprintf(stderr, "\n"); - } - } - printf("\n"); - return 0; -} - diff --git a/firmware/test/malloc/dmytest.c b/firmware/test/malloc/dmytest.c deleted file mode 100644 index a63bb30..0000000 --- a/firmware/test/malloc/dmytest.c +++ /dev/null @@ -1,173 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> - -#include "dmalloc.h" -#include "bmalloc.h" - -#define MAX 500 -#define MAX2 1000 -#define MAXC 2 - -#define TESTA -#define TESTB -#define TESTC -#define TESTD - -int test1(void) -{ -#define MAXK 100 - int i; - void *wow[MAXK]; - for(i=0; i<MAXK; i++) - if(!(wow[i]=malloc(412))) { - printf("*** Couldn't allocate memory, exiting\n"); - return -2; - } - for(i=MAXK-1; i>=0; i-=2) - free(wow[i]); - return 0; -} - -int test2(void) -{ -#define MAXS 10 -#define MAXS1 0 - int i; - void *ptr[MAXS]; - - for(i=MAXS1; i< MAXS; i++) { - printf("%d malloc(%d)\n", i, i*55); - ptr[i] = malloc (i*55); - } - for(i=MAXS1; i< MAXS; i++) { - void *tmp; - printf("%d realloc(%d)\n", i, i*155); - tmp=realloc(ptr[i], i*155); - if(tmp) - ptr[i] = tmp; - } - for(i=MAXS1; i< MAXS; i++) { - if(ptr[i]) { - printf("%d free(%d)\n", i, i*155); - free(ptr[i]); - } - } - return 0; -} - -int test3(void) -{ - int i; - void *ptr[MAXC]; - printf("This is test C:\n"); - - for(i=0; i< MAXC; i++) { - printf("%d malloc(100)\n", i+1); - ptr[i] = malloc(100); - printf(" ...returned %p\n", ptr[i]); - } - - for(i=0; i< MAXC; i++) { - printf("%d free()\n", i+1); - if(ptr[i]) - free(ptr[i]); - } - - printf("End of test C:\n"); - - return 0; -} - -int test4(void) -{ - int i; - int memory = 0; - void *pointers[MAX]; - printf("This is test I:\n"); - - for(i=0; i<MAX; i++) { - printf("%d attempts malloc(%d)\n", i, i*6); - pointers[i]=malloc(i*6); - if(!pointers[i]) { - printf("cant get more memory!"); - return(0); - } - memory += (i*6); - } - printf("\namount: %d\n", memory); - memory = 0; - for(i=0; i<MAX; i++) { - printf("%d attempts realloc(%d)\n", i, i*7); - pointers[i]=realloc(pointers[i], i*7); - memory += i*7; - } - printf("\namount: %d\n", memory); - for(i=0; i<MAX; i++) { - printf("%d attempts free(%d)\n", i, i*7); - free(pointers[i]); - } - printf("\nend of test 1\n"); - - return 0; -} - -int test5(void) -{ - int memory = 0; - int i; - void *pointers2[MAX2]; - memory = 0; - printf("\nTest II\n"); - for(i=0; i< MAX2; i++) { - printf("%d attempts malloc(%d)\n", i, 7); - pointers2[i] = malloc(7); - memory += 7; - } - printf("\namount: %d\n", memory); - for(i=0; i< MAX2; i++) { - if(pointers2[i]) - free(pointers2[i]); - } - printf("\nend of test II\n"); - - return 0; -} - -#define HEAPSIZE 10000 - -void smallblocks(void) -{ - void *ptr; - int i=0; - do { - - ptr = malloc(16); - i++; - } while(ptr); - - printf("I: %d\n", i); -} - -int main(int argc, char **argv) -{ - void *heap = (malloc)(HEAPSIZE); - if(!heap) - return -1; - dmalloc_initialize(); - bmalloc_add_pool(heap, HEAPSIZE); - - smallblocks(); - - bmalloc_status(); - dmalloc_status(); - - return 0; - - test1(); - test2(); - test3(); - test4(); - test5(); - - return 0; -} diff --git a/firmware/test/malloc/mytest.c b/firmware/test/malloc/mytest.c deleted file mode 100644 index 2ee5bd0..0000000 --- a/firmware/test/malloc/mytest.c +++ /dev/null @@ -1,70 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> - -#include "bmalloc.h" - -int main(int argc, char **argv) -{ - void *pointers[5]; - int i; - void *area; - - for(i=0; i<5; i++) - pointers[i] = malloc(8000); - - if(argc>1) { - switch(argv[1][0]) { - case '1': - for(i=0; i<5; i++) { - bmalloc_add_pool(pointers[i], 4000); - bmalloc_add_pool((char *)pointers[i]+4000, 4000); - } - break; - case '2': - area = malloc(20000); - bmalloc_add_pool(area, 3000); - bmalloc_add_pool((char *)area+6000, 3000); - bmalloc_add_pool((char *)area+3000, 3000); - bmalloc_add_pool((char *)area+12000, 3000); - bmalloc_add_pool((char *)area+9000, 3000); - break; - case '3': - { - void *ptr[10]; - area = malloc(20000); - bmalloc_add_pool(area, 20000); - - printf(" ** TEST USAGE\n"); - for(i=0; i<9; i++) - ptr[i]=bmalloc(200); - bmalloc_status(); - for(i=0; i<9; i++) - bfree(ptr[i]); - printf(" ** END OF TEST USAGE\n"); - } - - break; - case '4': - { - void *ptr[10]; - area = malloc(20000); - bmalloc_add_pool(area, 20000); - - ptr[0]=bmalloc(4080); - bmalloc_status(); - bfree(ptr[0]); - printf(" ** END OF TEST USAGE\n"); - } - - break; - } - } - else - for(i=4; i>=0; i--) - bmalloc_add_pool(pointers[i], 8000-i*100); - - bmalloc_status(); - - return 0; -} |