Mercurial > repos > rhope
annotate runtime/fixed_alloc.h @ 75:0083b2f7b3c7
Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 06 Jul 2010 07:52:59 -0400 |
parents | d1569087348f |
children | 5a195ee08eac |
rev | line source |
---|---|
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #ifndef FIXED_ALLOC_H_ |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #define FIXED_ALLOC_H_ |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include <stddef.h> |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include "plat_types.h" |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "block_alloc.h" |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 |
48
a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
8 #define GET_BLOCK(ptr) ((void*)(((uintptr_t)(ptr))&(~((uintptr_t)(BLOCK_SIZE-1))))) |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 #define MAX_SIZE (BLOCK_SIZE/32) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 #define STRIDE (BLOCK_SIZE/1024) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 #define MIN_SIZE (BLOCK_SIZE/1024) |
67 | 13 #define MAX_FREE 64 |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 #define ADJUST_SIZE(requested) (((requested)+(STRIDE-1)) & (~(STRIDE-1))) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 #pragma pack(push,1) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 typedef struct mem_block { |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 struct mem_block *next; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 struct mem_block *last; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 uint16_t numfree; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 uint16_t firstfree; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 uint8_t bitmap[1]; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } mem_block; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 #pragma pack(pop) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 //num_elements = (BLOCK_SIZE - sizeof(mem_block)+1)*8/(sizeof(element)*8+1) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 typedef struct { |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 mem_block *freelist; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 mem_block *inuse[(MAX_SIZE-MIN_SIZE)/STRIDE]; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 uint32_t freecount; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 } mem_manager; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 void fixed_alloc_init(); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 mem_manager * new_mem_manager(); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 void * falloc(size_t size, mem_manager * manager); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 void ffree(void * ptr, size_t size, mem_manager * manager); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 #endif //FIXED_ALLOC_H_ |