annotate runtime/fixed_alloc.h @ 177:e57c151f351e

Get bytecode engine working well enough for naive fib
author Mike Pavone <pavone@retrodev.com>
date Sun, 12 Jun 2011 03:49:51 -0700
parents 72c648bca43b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d1569087348f Some small optimizations
Mike Pavone <pavone@retrodev.com>
parents: 48
diff changeset
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_