comparison runtime/fixed_alloc.c @ 63:04baa003de5a

Merged latest changes with better C branch
author Mike Pavone <pavone@retrodev.com>
date Wed, 05 May 2010 22:12:23 -0400
parents 3e20ed8959c4
children d1569087348f
comparison
equal deleted inserted replaced
62:b218af069da7 63:04baa003de5a
1 #include "fixed_alloc.h" 1 #include "fixed_alloc.h"
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <string.h>
3 4
4 uint16_t max_free[(MAX_SIZE-MIN_SIZE)/STRIDE]; 5 uint16_t max_free[(MAX_SIZE-MIN_SIZE)/STRIDE];
5 6
6 void fixed_alloc_init() 7 void fixed_alloc_init()
7 { 8 {
34 block = manager->freelist; 35 block = manager->freelist;
35 if(block) 36 if(block)
36 { 37 {
37 --manager->freecount; 38 --manager->freecount;
38 manager->freelist = block->next; 39 manager->freelist = block->next;
40 memset(block, 0xCD, BLOCK_SIZE);
39 } 41 }
40 else 42 else
41 { 43 {
42 block = block_alloc(BLOCK_SIZE); 44 block = block_alloc(BLOCK_SIZE);
45 memset(block, 0xAB, BLOCK_SIZE);
43 } 46 }
44 manager->inuse[bucket] = block; 47 manager->inuse[bucket] = block;
45 block->next = NULL; 48 block->next = NULL;
46 block->last = NULL; 49 block->last = NULL;
47 block->numfree = max_free[bucket]; 50 block->numfree = max_free[bucket];
76 manager->inuse[bucket] = block->next; 79 manager->inuse[bucket] = block->next;
77 if(block->next) 80 if(block->next)
78 block->next->last = block->last; 81 block->next->last = block->last;
79 } 82 }
80 i = i*8+bit; 83 i = i*8+bit;
81 //printf("%X\n", ((char *)block)+BLOCK_SIZE-((i+1)*size));
82 return (void *)(((char *)block)+BLOCK_SIZE-((i+1)*size)); 84 return (void *)(((char *)block)+BLOCK_SIZE-((i+1)*size));
83 } 85 }
84 86
85 void ffree(void * ptr, size_t size, mem_manager * manager) 87 void ffree(void * ptr, size_t size, mem_manager * manager)
86 { 88 {
91 free(ptr); 93 free(ptr);
92 return; 94 return;
93 } 95 }
94 //puts("ffree"); 96 //puts("ffree");
95 size = ADJUST_SIZE(size); 97 size = ADJUST_SIZE(size);
98 memset(ptr, 0xEF, size);
96 block = GET_BLOCK(ptr); 99 block = GET_BLOCK(ptr);
97 i = (((((char *)block) + BLOCK_SIZE) - ((char *)ptr))/size)-1; 100 i = (((((char *)block) + BLOCK_SIZE) - ((char *)ptr))/size)-1;
98 bit = i & 0x7; 101 bit = i & 0x7;
99 i = (i&0xFFFFFFF8) >> 3; 102 i = (i&0xFFFFFFF8) >> 3;
100 //printf("ptr:%X,block:%X,i:%d,bit:%d\n", ptr,block,bit,i); 103 //printf("ptr:%X,block:%X,i:%d,bit:%d\n", ptr,block,bit,i);
117 else 120 else
118 manager->inuse[bucket] = block->next; 121 manager->inuse[bucket] = block->next;
119 if(block->next) 122 if(block->next)
120 block->next->last = block->last; 123 block->next->last = block->last;
121 if(manager->freecount == MAX_FREE) 124 if(manager->freecount == MAX_FREE)
125 {
122 block_free(block, BLOCK_SIZE); 126 block_free(block, BLOCK_SIZE);
127 }
123 else 128 else
124 { 129 {
125 block->next = manager->freelist; 130 block->next = manager->freelist;
126 manager->freelist = block; 131 manager->freelist = block;
127 ++manager->freecount; 132 ++manager->freecount;