Internal data for the allocator. More...
#include <internal.h>

Data Fields | |
| int | inited | 
| Current status.   | |
| int | initing | 
| enum tm_phase phase | next_phase | 
| The current processing phase.   | |
| size_t | n_phase_transitions [tm_phase_END+1][tm_phase_END+1] | 
| Number of transitions from one phase to another.   | |
| size_t | n_color_transitions [tm_TOTAL+1][tm_TOTAL+1] | 
| Number of transitions from one color to another.   | |
| int | parceling | 
| Possible actions during current phase.   | |
| int | allocating | 
| int | marking | 
| int | scanning | 
| int | sweeping | 
| int | unmarking | 
| int | trigger_full_gc | 
| If true, full GC is triggered on next call to tm_alloc().   | |
| size_t | n [tm__LAST3] | 
| Global node counts.   | |
| size_t | alloc_by_phase [tm_phase_END] | 
| Number of cumulative allocations during each phase.   | |
| size_t | alloc_n [tm__LAST3] | 
| Stats during tm_alloc().   | |
| tm_type | types | 
| Types.   | |
| int | type_id | 
| The next type id.   | |
| tm_type | type_reserve [50] | 
| A reserve of tm_type structures.   | |
| tm_type * | type_free | 
| tm_type * | type_hash [tm_type_hash_LEN] | 
| Type hash table.   | |
| int | block_id | 
| Blocks:.   | |
| tm_block * | block_first | 
| The first block allocated.   | |
| tm_block * | block_last | 
| The last block allocated.   | |
| tm_list | free_blocks | 
| A list of free tm_blocks not returned to the OS.   | |
| int | free_blocks_n | 
| Number of tm_blocks in the free_blocks list.   | |
| tm_type * | bt | 
| Block sweeping iterators.   | |
| tm_block * | bb | 
| Block.   | |
| void * | os_alloc_last | 
| OS-level allocation:.   | |
| size_t | os_alloc_last_size | 
| The size of the last allocation from the operating system.   | |
| void * | os_alloc_expected | 
| The next addresses expected from _tm_os_alloc_().   | |
| void * | ptr_range [2] | 
| Valid pointer range.   | |
| bitset_t | page_in_use [tm_BITMAP_SIZE] | 
| A bit map of pages with nodes in use.   | |
| bitset_t | block_header [tm_BITMAP_SIZE] | 
| A bit map of pages containing allocated block headers.   | |
| bitset_t | block_large [tm_BITMAP_SIZE] | 
| A bit map of large blocks.   | |
| tm_node_iterator | node_color_iter [tm_TOTAL] | 
| Type color list iterators.   | |
| tm_node * | scan_node | 
| Partial scan buffer:.   | |
| void * | scan_ptr | 
| The current position int the node being scanned for pointers.   | |
| size_t * | scan_size | 
| The scan size.   | |
| tm_root | roots [16] | 
| Roots:.   | |
| short | nroots | 
| Number of roots regions registered.   | |
| tm_root | aroots [16] | 
| List of roots to avoid during scanning: anti-roots.   | |
| short | naroots | 
| Number of anti-roots registered.   | |
| short | root_datai | 
| Huh?   | |
| short | root_newi | 
| short | stack_grows | 
| Direction of C stack growth.   | |
| void ** | stack_ptrp | 
| Pointer to a stack allocated variable.   | |
| short | rooti | 
| Root being marked.   | |
| const char * | rp | 
| Current address in root being marked.   | |
| unsigned long | data_mutations | 
| How many root mutations happened since the start of the ROOT phase.   | |
| unsigned long | stack_mutations | 
| How many stack mutations happened since the start of the ROOT phase.   | |
| tm_time_stat | ts_os_alloc | 
| Time Stats:.   | |
| tm_time_stat | ts_os_free | 
| Time spent in tm_free_os().   | |
| tm_time_stat | ts_alloc | 
| Time spent in tm_malloc().   | |
| tm_time_stat | ts_free | 
| Time spent in tm_free().   | |
| tm_time_stat | ts_gc | 
| Time spent in tm_gc_full().   | |
| tm_time_stat | ts_gc_inner | 
| Time spent in tm_gc_full_inner().   | |
| tm_time_stat | ts_barrier | 
| Time spent in tm_write_barrier().   | |
| tm_time_stat | ts_barrier_root | 
| Time spent in tm_write_barrier_root().   | |
| tm_time_stat | ts_barrier_pure | 
| Time spent in tm_write_barrier_pure().   | |
| tm_time_stat | ts_barrier_black | 
| Time spent in tm_write_barrier on tm_BLACK nodes.   | |
| tm_time_stat | ts_phase [tm_phase_END] | 
| Time spent in each phase during tm_alloc().   | |
| size_t | alloc_id | 
| Stats/debugging support:.   | |
| size_t | alloc_pass | 
| Current allocation pass.   | |
| size_t | alloc_since_sweep | 
| Allocations since sweep.   | |
| size_t | alloc_request_size | 
| Current allocation request size.   | |
| tm_type * | alloc_request_type | 
| Current allocation request type.   | |
| int | msg_ignored | 
| True if last tm_msg() was disabled; used by tm_msg1().   | |
| char | msg_enable_table [256] | 
| Table of enabled message types.   | |
| size_t | blocks_allocated_since_gc | 
| Full GC stats:.   | |
| size_t | blocks_in_use_after_gc | 
| size_t | nodes_allocated_since_gc | 
| size_t | nodes_in_use_after_gc | 
| size_t | bytes_allocated_since_gc | 
| size_t | bytes_in_use_after_gc | 
| int | mmap_fd | 
| File descriptor used by mmap().   | |
| jmp_buf | jb | 
| A block of saved CPU registers to root scan.   | |
Internal data for the allocator.
This structure is specifically avoided by the uninitialized data segment root, using an anti-root. See tm_init().
FIXME: this structure is very large due to the statically allocated block bit maps.
Definition at line 92 of file internal.h.
| size_t tm_data::alloc_by_phase[tm_phase_END] | 
Number of cumulative allocations during each phase.
Definition at line 120 of file internal.h.
Referenced by _tm_alloc_type_inner(), and tm_print_time_stats().
| size_t tm_data::alloc_id | 
Stats/debugging support:.
Current allocation id.
Definition at line 256 of file internal.h.
Referenced by _tm_alloc_type_inner(), and _tm_phase_init().
| size_t tm_data::alloc_n[tm__LAST3] | 
Stats during tm_alloc().
Definition at line 123 of file internal.h.
Referenced by _tm_alloc_type_inner(), and _tm_node_set_color().
| size_t tm_data::alloc_pass | 
Current allocation pass.
Definition at line 259 of file internal.h.
Referenced by _tm_alloc_type_inner().
| size_t tm_data::alloc_request_size | 
Current allocation request size.
Definition at line 265 of file internal.h.
Referenced by _tm_alloc_desc_inner(), and _tm_alloc_inner().
Current allocation request type.
Definition at line 267 of file internal.h.
Referenced by _tm_alloc_desc_inner(), and _tm_alloc_inner().
| size_t tm_data::alloc_since_sweep | 
Allocations since sweep.
Definition at line 262 of file internal.h.
Referenced by _tm_alloc_type_inner(), _tm_phase_init(), and _tm_type_memory_pressureQ_2().
Definition at line 107 of file internal.h.
Referenced by _tm_phase_init().
List of roots to avoid during scanning: anti-roots.
Definition at line 205 of file internal.h.
Referenced by _tm_root_add(), and tm_root_remove().
The first block allocated.
Definition at line 145 of file internal.h.
Referenced by _tm_block_reclaim(), and tm_block_init().
| bitset_t tm_data::block_header[tm_BITMAP_SIZE] | 
A bit map of pages containing allocated block headers.
Definition at line 180 of file internal.h.
Blocks:.
The next block id.
Definition at line 142 of file internal.h.
Referenced by tm_block_init(), and tm_print_block_stats().
| bitset_t tm_data::block_large[tm_BITMAP_SIZE] | 
A bit map of large blocks.
Definition at line 183 of file internal.h.
The last block allocated.
Definition at line 147 of file internal.h.
Referenced by _tm_block_reclaim(), and tm_block_init().
Full GC stats:.
Definition at line 277 of file internal.h.
Referenced by _tm_block_alloc(), _tm_block_alloc_from_free_list(), and _tm_gc_clear_stats().
Definition at line 279 of file internal.h.
Referenced by _tm_gc_clear_stats().
Block sweeping iterators.
Block type.
Definition at line 157 of file internal.h.
Referenced by _tm_block_sweep_init().
Definition at line 285 of file internal.h.
Referenced by _tm_gc_clear_stats(), and _tm_type_alloc_node_from_free_list().
Definition at line 287 of file internal.h.
Referenced by _tm_gc_clear_stats().
| unsigned long tm_data::data_mutations | 
How many root mutations happened since the start of the ROOT phase.
Definition at line 224 of file internal.h.
Referenced by __tm_write_barrier(), __tm_write_barrier_root(), _tm_phase_init(), _tm_root_loop_init(), _tm_root_scan_all(), and tm_init().
A list of free tm_blocks not returned to the OS.
Definition at line 150 of file internal.h.
Referenced by _tm_block_alloc_from_free_list(), _tm_block_free(), tm_init(), and tm_validate_lists().
Number of tm_blocks in the free_blocks list.
Definition at line 152 of file internal.h.
Referenced by _tm_alloc_type_inner(), _tm_block_alloc_from_free_list(), _tm_block_free(), _tm_type_memory_pressureQ(), tm_init(), and tm_print_stats().
| int tm_data::inited | 
Current status.
Definition at line 94 of file internal.h.
Referenced by tm_abort(), tm_alloc(), tm_free(), tm_gc_full(), and tm_init().
| int tm_data::initing | 
Definition at line 94 of file internal.h.
Referenced by tm_init().
| jmp_buf tm_data::jb | 
A block of saved CPU registers to root scan.
Definition at line 293 of file internal.h.
Referenced by tm_init().
| int tm_data::marking | 
Definition at line 108 of file internal.h.
Referenced by _tm_phase_init().
| int tm_data::mmap_fd | 
File descriptor used by mmap().
Definition at line 290 of file internal.h.
Referenced by _tm_os_alloc_().
| char tm_data::msg_enable_table[256] | 
Table of enabled message types.
Definition at line 272 of file internal.h.
True if last tm_msg() was disabled; used by tm_msg1().
Definition at line 270 of file internal.h.
| size_t tm_data::n[tm__LAST3] | 
Global node counts.
Definition at line 117 of file internal.h.
Referenced by _tm_alloc_type_inner(), _tm_block_alloc(), _tm_block_alloc_from_free_list(), _tm_block_free(), _tm_block_reclaim(), _tm_block_unparcel_nodes(), _tm_check_sweep_error(), _tm_free_inner(), _tm_gc_clear_stats(), _tm_gc_full_type_inner(), _tm_mark_possible_ptr(), _tm_node_delete(), _tm_node_init(), _tm_node_parcel_some(), _tm_node_scan_some(), _tm_node_set_color(), _tm_node_sweep_all(), _tm_node_sweep_some(), _tm_node_sweep_some_for_type(), _tm_node_unmark_all(), _tm_node_unmark_some(), _tm_os_alloc(), _tm_os_free(), _tm_phase_init(), _tm_range_scan(), _tm_root_scan_all(), _tm_root_scan_some(), _tm_type_add_block(), _tm_type_alloc_node_from_free_list(), _tm_type_remove_block(), tm_node_iterator_next(), tm_print_block_stats(), tm_print_stats(), and tm_validate_lists().
| size_t tm_data::n_color_transitions[tm_TOTAL+1][tm_TOTAL+1] | 
Number of transitions from one color to another.
Definition at line 103 of file internal.h.
Referenced by _tm_node_set_color(), and tm_print_color_transition_stats().
| size_t tm_data::n_phase_transitions[tm_phase_END+1][tm_phase_END+1] | 
Number of transitions from one phase to another.
Definition at line 100 of file internal.h.
Referenced by _tm_phase_init(), and tm_print_phase_transition_stats().
| short tm_data::naroots | 
Number of anti-roots registered.
Definition at line 207 of file internal.h.
Referenced by _tm_root_add(), and tm_root_remove().
| enum tm_phase phase tm_data::next_phase | 
The current processing phase.
Definition at line 97 of file internal.h.
Referenced by _tm_alloc_type_inner().
| tm_node_iterator tm_data::node_color_iter[tm_TOTAL] | 
Type color list iterators.
Definition at line 186 of file internal.h.
Referenced by tm_write_barrier_node().
Definition at line 281 of file internal.h.
Referenced by _tm_gc_clear_stats(), and _tm_type_alloc_node_from_free_list().
Definition at line 283 of file internal.h.
Referenced by _tm_gc_clear_stats().
| short tm_data::nroots | 
Number of roots regions registered.
Definition at line 202 of file internal.h.
Referenced by _tm_root_add_1(), tm_init(), tm_ptr_is_in_root_set(), and tm_root_remove().
The next addresses expected from _tm_os_alloc_().
Only used for sbrk() allocations.
Definition at line 168 of file internal.h.
Referenced by _tm_os_alloc_(), and _tm_os_free_().
| void* tm_data::os_alloc_last | 
OS-level allocation:.
The address of the last allocation from the operating system.
Definition at line 164 of file internal.h.
Referenced by _tm_os_alloc_(), and _tm_os_free_().
| size_t tm_data::os_alloc_last_size | 
The size of the last allocation from the operating system.
Definition at line 166 of file internal.h.
Referenced by _tm_os_alloc_(), and _tm_os_free_().
| bitset_t tm_data::page_in_use[tm_BITMAP_SIZE] | 
A bit map of pages with nodes in use.
Definition at line 177 of file internal.h.
Referenced by _tm_page_in_use(), _tm_page_mark_unused(), _tm_page_mark_used(), and tm_init().
Possible actions during current phase.
Definition at line 106 of file internal.h.
Referenced by _tm_node_parcel_some(), and _tm_node_set_color().
| void* tm_data::ptr_range[2] | 
Valid pointer range.
Definition at line 174 of file internal.h.
| short tm_data::root_datai | 
Huh?
Definition at line 210 of file internal.h.
Referenced by _tm_root_add_1(), _tm_root_loop_init(), tm_init(), and tm_root_remove().
| short tm_data::root_newi | 
Definition at line 210 of file internal.h.
Referenced by _tm_root_add_1(), and tm_root_add().
| short tm_data::rooti | 
Root being marked.
Definition at line 219 of file internal.h.
Referenced by _tm_root_loop_init(), and _tm_root_scan_some().
Roots:.
List of root regions for scanning.
Definition at line 200 of file internal.h.
Referenced by __tm_write_barrier(), __tm_write_barrier_root(), _tm_root_add_1(), _tm_root_loop_init(), _tm_root_scan_all(), _tm_root_scan_id(), _tm_root_scan_some(), tm_init(), tm_ptr_is_in_root_set(), and tm_root_remove().
| const char* tm_data::rp | 
Current address in root being marked.
Definition at line 221 of file internal.h.
Referenced by _tm_root_loop_init(), and _tm_root_scan_some().
Partial scan buffer:.
The current node being scanned for pointers.
Definition at line 191 of file internal.h.
| void* tm_data::scan_ptr | 
The current position int the node being scanned for pointers.
Definition at line 193 of file internal.h.
| size_t* tm_data::scan_size | 
The scan size.
Definition at line 195 of file internal.h.
Definition at line 109 of file internal.h.
Referenced by _tm_phase_init().
| short tm_data::stack_grows | 
| unsigned long tm_data::stack_mutations | 
How many stack mutations happened since the start of the ROOT phase.
Definition at line 226 of file internal.h.
Referenced by __tm_write_barrier(), __tm_write_barrier_root(), _tm_phase_init(), _tm_root_loop_init(), _tm_root_scan_all(), _tm_stack_scan(), and tm_init().
| void** tm_data::stack_ptrp | 
Pointer to a stack allocated variable.
See user.c.
Definition at line 216 of file internal.h.
Referenced by _tm_set_stack_ptr(), and tm_init().
Definition at line 110 of file internal.h.
Referenced by _tm_phase_init().
If true, full GC is triggered on next call to tm_alloc().
Definition at line 114 of file internal.h.
Referenced by tm_alloc(), and tm_write_barrier_node().
Time spent in tm_malloc().
Definition at line 235 of file internal.h.
Referenced by _tm_check_sweep_error(), tm_alloc(), tm_alloc_desc(), tm_init(), tm_print_time_stats(), and tm_realloc().
Time spent in tm_write_barrier().
Definition at line 243 of file internal.h.
Referenced by __tm_write_barrier(), tm_init(), and tm_print_time_stats().
Time spent in tm_write_barrier on tm_BLACK nodes.
Definition at line 249 of file internal.h.
Referenced by tm_init(), tm_print_time_stats(), and tm_write_barrier_node().
Time spent in tm_write_barrier_pure().
Definition at line 247 of file internal.h.
Referenced by __tm_write_barrier_pure(), tm_init(), and tm_print_time_stats().
Time spent in tm_write_barrier_root().
Definition at line 245 of file internal.h.
Referenced by __tm_write_barrier_root(), tm_init(), and tm_print_time_stats().
Time spent in tm_free().
Definition at line 237 of file internal.h.
Referenced by tm_free(), tm_init(), and tm_print_time_stats().
Time spent in tm_gc_full().
Definition at line 239 of file internal.h.
Referenced by tm_gc_full(), tm_init(), and tm_print_time_stats().
Time spent in tm_gc_full_inner().
Definition at line 241 of file internal.h.
Referenced by _tm_gc_full_type_inner(), and tm_init().
Time Stats:.
Time spent in tm_alloc_os().
Definition at line 231 of file internal.h.
Referenced by _tm_os_alloc(), tm_init(), and tm_print_time_stats().
Time spent in tm_free_os().
Definition at line 233 of file internal.h.
Referenced by _tm_os_free(), tm_init(), and tm_print_time_stats().
| tm_time_stat tm_data::ts_phase[tm_phase_END] | 
Time spent in each phase during tm_alloc().
Definition at line 251 of file internal.h.
Referenced by _tm_alloc_type_inner(), tm_init(), and tm_print_time_stats().
Definition at line 132 of file internal.h.
Referenced by tm_init(), and tm_type_new().
| tm_type* tm_data::type_hash[tm_type_hash_LEN] | 
Type hash table.
Definition at line 137 of file internal.h.
Referenced by tm_init(), tm_size_to_type_2(), and tm_type_new_2().
| int tm_data::type_id | 
The next type id.
Definition at line 129 of file internal.h.
Referenced by tm_print_stats(), and tm_type_init().
A reserve of tm_type structures.
Definition at line 132 of file internal.h.
Referenced by tm_init().
Types.
List of all types.
Definition at line 127 of file internal.h.
Referenced by _tm_block_sweep_init(), _tm_check_sweep_error(), tm_block_scavenge(), tm_init(), tm_node_iterator_init(), tm_node_iterator_next(), tm_print_block_stats(), tm_print_stats(), tm_type_new(), and tm_validate_lists().
Definition at line 111 of file internal.h.
Referenced by _tm_phase_init().
 1.6.1