Mercurial > repos > rhope
annotate runtime/fixed_alloc.h @ 124:8aedae4f4ddd
Add support for Int32 as Dictionary key
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 28 Oct 2010 21:05:50 -0400 |
parents | 72c648bca43b |
children |
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) |
95
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
11 #ifndef STRIDE |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 #define STRIDE (BLOCK_SIZE/1024) |
95
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
13 #endif |
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
14 #ifndef MIN_SIZE |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 #define MIN_SIZE (BLOCK_SIZE/1024) |
95
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
16 #endif |
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
17 #ifndef MAX_FREE |
67 | 18 #define MAX_FREE 64 |
95
f4fd8962c385
Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
19 #endif |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 #define ADJUST_SIZE(requested) (((requested)+(STRIDE-1)) & (~(STRIDE-1))) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 #pragma pack(push,1) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 typedef struct mem_block { |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 struct mem_block *next; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 struct mem_block *last; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 uint16_t numfree; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 uint16_t firstfree; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 uint8_t bitmap[1]; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 } mem_block; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 #pragma pack(pop) |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 //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
|
35 typedef struct { |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 mem_block *freelist; |
92
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
89
diff
changeset
|
37 mem_block *inuse[(MAX_SIZE-MIN_SIZE)/STRIDE+1]; |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 uint32_t freecount; |
89
5a195ee08eac
Fix memory leak and bug that was preventing First@Dictionary from working properly
Mike Pavone <pavone@retrodev.com>
parents:
67
diff
changeset
|
39 uint32_t fullcount; |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 } mem_manager; |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 void fixed_alloc_init(); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 mem_manager * new_mem_manager(); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 void * falloc(size_t size, mem_manager * manager); |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 void ffree(void * ptr, size_t size, mem_manager * manager); |
89
5a195ee08eac
Fix memory leak and bug that was preventing First@Dictionary from working properly
Mike Pavone <pavone@retrodev.com>
parents:
67
diff
changeset
|
46 void print_mem_info(mem_manager * manager); |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
95
diff
changeset
|
47 void print_live_object_types(mem_manager * manager); |
119
72c648bca43b
Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents:
105
diff
changeset
|
48 void find_live_objects_oftype(mem_manager * manager, int32_t type_id, void ** output); |
72c648bca43b
Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents:
105
diff
changeset
|
49 void get_live_object_counts(mem_manager * manager, int32_t * counts); |
41
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 |
1b86a1ee500a
Added faster allocator for small objects
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 #endif //FIXED_ALLOC_H_ |