Ruby 2.7.0p0(2019-12-25revision647ee6f091eafcce70ffb75ddf7e121e192ab217)

Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
gc.c File Reference
`#include "ruby/encoding.h"`
`#include "ruby/io.h"`
`#include "ruby/st.h"`
`#include "ruby/re.h"`
`#include "ruby/thread.h"`
`#include "ruby/util.h"`
`#include "ruby/debug.h"`
`#include "internal.h"`
`#include "eval_intern.h"`
`#include "vm_core.h"`
`#include "builtin.h"`
`#include "gc.h"`
`#include "constant.h"`
`#include "ruby_atomic.h"`
`#include "probes.h"`
`#include "id_table.h"`
`#include "symbol.h"`
`#include <stdio.h>`
`#include <stdarg.h>`
`#include <setjmp.h>`
`#include <sys/types.h>`
`#include "ruby_assert.h"`
`#include "debug_counter.h"`
`#include "transient_heap.h"`
`#include "mjit.h"`
`#include "regint.h"`
`#include "gc.rbinc"`

Go to the source code of this file.

## Data Structures
struct | optional
struct | ruby_gc_params_t
struct | gc_profile_record
struct | RVALUE
struct | heap_page_header
struct | heap_page_body
struct | gc_list
struct | stack_chunk
struct | mark_stack
struct | rb_heap_struct
struct | rb_objspace
struct | rb_objspace::mark_func_data_struct
struct | heap_page
struct | RZombie
struct | each_obj_args
struct | os_each_struct
struct | force_finalize_list
struct | verify_internal_consistency_struct
struct | objspace_and_reason
struct | heap_cursor
struct | root_objects_data
struct | gc_raise_tag
struct | malloc_obj_info
struct | weakmap
struct | wmap_iter_arg

## Macros
#define | rb_data_object_alloc rb_data_object_alloc
#define | rb_data_typed_object_alloc rb_data_typed_object_alloc
#define | rb_setjmp(env) RUBY_SETJMP(env)
#define | rb_jmp_buf rb_jmpbuf_t
#define | GC_HEAP_INIT_SLOTS 10000
#define | GC_HEAP_FREE_SLOTS 4096
#define | GC_HEAP_GROWTH_FACTOR 1.8
#define | GC_HEAP_GROWTH_MAX_SLOTS 0 /* 0 is disable */
#define | GC_HEAP_OLDOBJECT_LIMIT_FACTOR 2.0
#define | GC_HEAP_FREE_SLOTS_MIN_RATIO 0.20
#define | GC_HEAP_FREE_SLOTS_GOAL_RATIO 0.40
#define | GC_HEAP_FREE_SLOTS_MAX_RATIO 0.65
#define | GC_MALLOC_LIMIT_MIN (16 * 1024 * 1024 /* 16MB */)
#define | GC_MALLOC_LIMIT_MAX (32 * 1024 * 1024 /* 32MB */)
#define | GC_MALLOC_LIMIT_GROWTH_FACTOR 1.4
#define | GC_OLDMALLOC_LIMIT_MIN (16 * 1024 * 1024 /* 16MB */)
#define | GC_OLDMALLOC_LIMIT_GROWTH_FACTOR 1.2
#define | GC_OLDMALLOC_LIMIT_MAX (128 * 1024 * 1024 /* 128MB */)
#define | PRINT_MEASURE_LINE 0
#define | PRINT_ENTER_EXIT_TICK 0
#define | PRINT_ROOT_TICKS 0
#define | USE_TICK_T (PRINT_ENTER_EXIT_TICK || PRINT_MEASURE_LINE || PRINT_ROOT_TICKS)
#define | TICK_TYPE 1
#define | GC_DEBUG 0
#define | RGENGC_DEBUG 0
#define | RGENGC_DEBUG_ENABLED(level) ((RGENGC_DEBUG) >= (level))
#define | RGENGC_CHECK_MODE 0
#define | GC_ASSERT(expr) RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr)
#define | RGENGC_OLD_NEWOBJ_CHECK 0
#define | RGENGC_PROFILE 0
#define | RGENGC_ESTIMATE_OLDMALLOC 1
#define | RGENGC_FORCE_MAJOR_GC 0
#define | GC_PROFILE_MORE_DETAIL 0
#define | GC_PROFILE_DETAIL_MEMORY 0
#define | GC_ENABLE_INCREMENTAL_MARK USE_RINCGC
#define | GC_ENABLE_LAZY_SWEEP 1
#define | CALC_EXACT_MALLOC_SIZE USE_GC_MALLOC_OBJ_INFO_DETAILS
#define | MALLOC_ALLOCATED_SIZE 0
#define | MALLOC_ALLOCATED_SIZE_CHECK 0
#define | GC_DEBUG_STRESS_TO_CLASS 0
#define | RGENGC_OBJ_INFO (RGENGC_DEBUG | RGENGC_CHECK_MODE)
#define | popcount_bits rb_popcount_intptr
#define | STACK_CHUNK_SIZE 500
#define | HEAP_PAGE_ALIGN_LOG 14
#define | CEILDIV(i, mod) (((i) + (mod) - 1)/(mod))
#define | GET_PAGE_BODY(x) ((struct heap_page_body *)((bits_t)(x) & ~(HEAP_PAGE_ALIGN_MASK)))
#define | GET_PAGE_HEADER(x) (&GET_PAGE_BODY(x)->header)
#define | GET_HEAP_PAGE(x) (GET_PAGE_HEADER(x)->page)
#define | NUM_IN_PAGE(p) (((bits_t)(p) & HEAP_PAGE_ALIGN_MASK)/sizeof(RVALUE))
#define | BITMAP_INDEX(p) (NUM_IN_PAGE(p) / BITS_BITLENGTH )
#define | BITMAP_OFFSET(p) (NUM_IN_PAGE(p) & (BITS_BITLENGTH-1))
#define | BITMAP_BIT(p) ((bits_t)1 << BITMAP_OFFSET(p))
#define | MARKED_IN_BITMAP(bits, p) ((bits)[BITMAP_INDEX(p)] & BITMAP_BIT(p))
#define | MARK_IN_BITMAP(bits, p) ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] | BITMAP_BIT(p))
#define | CLEAR_IN_BITMAP(bits, p) ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] & ~BITMAP_BIT(p))
#define | GET_HEAP_MARK_BITS(x) (&GET_HEAP_PAGE(x)->mark_bits[0])
#define | GET_HEAP_PINNED_BITS(x) (&GET_HEAP_PAGE(x)->pinned_bits[0])
#define | GET_HEAP_UNCOLLECTIBLE_BITS(x) (&GET_HEAP_PAGE(x)->uncollectible_bits[0])
#define | GET_HEAP_WB_UNPROTECTED_BITS(x) (&GET_HEAP_PAGE(x)->wb_unprotected_bits[0])
#define | GET_HEAP_MARKING_BITS(x) (&GET_HEAP_PAGE(x)->marking_bits[0])
#define | rb_objspace (*rb_objspace_of(GET_VM()))
#define | rb_objspace_of(vm) ((vm)->objspace)
#define | ruby_initial_gc_stress gc_params.gc_stress
#define | malloc_limit objspace->malloc_params.limit
#define | malloc_increase objspace->malloc_params.increase
#define | malloc_allocated_size objspace->malloc_params.allocated_size
#define | heap_pages_sorted objspace->heap_pages.sorted
#define | heap_allocated_pages objspace->heap_pages.allocated_pages
#define | heap_pages_sorted_length objspace->heap_pages.sorted_length
#define | heap_pages_lomem objspace->heap_pages.range[0]
#define | heap_pages_himem objspace->heap_pages.range[1]
#define | heap_allocatable_pages objspace->heap_pages.allocatable_pages
#define | heap_pages_freeable_pages objspace->heap_pages.freeable_pages
#define | heap_pages_final_slots objspace->heap_pages.final_slots
#define | heap_pages_deferred_final objspace->heap_pages.deferred_final
#define | heap_eden (&objspace->eden_heap)
#define | heap_tomb (&objspace->tomb_heap)
#define | dont_gc objspace->flags.dont_gc
#define | during_gc objspace->flags.during_gc
#define | finalizing objspace->atomic_flags.finalizing
#define | finalizer_table objspace->finalizer_table
#define | global_list objspace->global_list
#define | ruby_gc_stressful objspace->flags.gc_stressful
#define | ruby_gc_stress_mode objspace->gc_stress_mode
#define | stress_to_class 0
#define | gc_mode(objspace) gc_mode_verify((enum gc_mode)(objspace)->flags.mode)
#define | gc_mode_set(objspace, mode) ((objspace)->flags.mode = (unsigned int)gc_mode_verify(mode))
#define | is_marking(objspace) (gc_mode(objspace) == gc_mode_marking)
#define | is_sweeping(objspace) (gc_mode(objspace) == gc_mode_sweeping)
#define | is_full_marking(objspace) ((objspace)->flags.during_minor_gc == FALSE)
#define | is_incremental_marking(objspace) ((objspace)->flags.during_incremental_marking != FALSE)
#define | will_be_incremental_marking(objspace) ((objspace)->rgengc.need_major_gc != GPR_FLAG_NONE)
#define | has_sweeping_pages(heap) ((heap)->sweeping_page != 0)
#define | is_lazy_sweeping(heap) (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap))
#define | nonspecial_obj_id(obj) (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)
#define | obj_id_to_ref(objid) ((objid) ^ FIXNUM_FLAG) /* unset FIXNUM_FLAG */
#define | RANY(o) ((RVALUE*)(o))
#define | RZOMBIE(o) ((struct RZombie *)(o))
#define | nomem_error GET_VM()->special_exceptions[ruby_error_nomemory]
#define | TYPED_UPDATE_IF_MOVED(_objspace, _type, _thing)
#define | UPDATE_IF_MOVED(_objspace, _thing) TYPED_UPDATE_IF_MOVED(_objspace, VALUE, _thing)
#define | gc_prof_record(objspace) (objspace)->profile.current_record
#define | gc_prof_enabled(objspace) ((objspace)->profile.run && (objspace)->profile.current_record)
#define | gc_report if (!RGENGC_DEBUG_ENABLED(0)) {} else gc_report_body
#define | PUSH_MARK_FUNC_DATA(v)
#define | POP_MARK_FUNC_DATA() objspace->mark_func_data = prev_mark_func_data;} while (0)
#define | MEASURE_LINE(expr) expr
#define | FL_CHECK2(name, x, pred)
#define | FL_TEST2(x, f) FL_CHECK2("FL_TEST2", x, FL_TEST_RAW((x),(f)) != 0)
#define | FL_SET2(x, f) FL_CHECK2("FL_SET2", x, RBASIC(x)->flags |= (f))
#define | FL_UNSET2(x, f) FL_CHECK2("FL_UNSET2", x, RBASIC(x)->flags &= ~(f))
#define | RVALUE_MARK_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), (obj))
#define | RVALUE_PIN_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), (obj))
#define | RVALUE_PAGE_MARKED(page, obj) MARKED_IN_BITMAP((page)->mark_bits, (obj))
#define | RVALUE_WB_UNPROTECTED_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), (obj))
#define | RVALUE_UNCOLLECTIBLE_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), (obj))
#define | RVALUE_MARKING_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), (obj))
#define | RVALUE_PAGE_WB_UNPROTECTED(page, obj) MARKED_IN_BITMAP((page)->wb_unprotected_bits, (obj))
#define | RVALUE_PAGE_UNCOLLECTIBLE(page, obj) MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))
#define | RVALUE_PAGE_MARKING(page, obj) MARKED_IN_BITMAP((page)->marking_bits, (obj))
#define | RVALUE_OLD_AGE 3
#define | RVALUE_AGE_SHIFT 5 /* FL_PROMOTED0 bit */
#define | gc_event_hook_available_p(objspace) ((objspace)->flags.has_hook)
#define | gc_event_hook_needed_p(objspace, event) ((objspace)->hook_events & (event))
#define | gc_event_hook(objspace, event, data)
#define | UNEXPECTED_NODE(func)
#define | OBJ_ID_INCREMENT (sizeof(RVALUE) / 2)
#define | OBJ_ID_INITIAL (OBJ_ID_INCREMENT * 2)
#define | RESTORE_FINALIZER()
#define | NUM2PTR(x) NUM2ULONG(x)
#define | COUNT_TYPE(t) case (t): return ID2SYM(rb_intern(#t)); break;
#define | SET_STACK_END SET_MACHINE_STACK_END(&ec->machine.stack_end)
#define | STACK_START (ec->machine.stack_start)
#define | STACK_END (ec->machine.stack_end)
#define | STACK_LEVEL_MAX (ec->machine.stack_maxsize/sizeof(VALUE))
#define | STACK_LENGTH
#define | PREVENT_STACK_OVERFLOW 1
#define | STACKFRAME_FOR_CALL_CFUNC 2048
#define | GET_STACK_BOUNDS(start, end, appendix)
#define | MARK_CHECKPOINT_PRINT_TICK(category)
#define | MARK_CHECKPOINT(category)
#define | PROFILE_REMEMBERSET_MARK 0
#define | I(s) ID_##s = rb_intern(#s);
#define | MARK_OBJECT_ARY_BUCKET_SIZE 1024
#define | GC_NOTIFY 0
#define | gc_stress_full_mark_after_malloc_p() (FIXNUM_P(ruby_gc_stress_mode) && (FIX2LONG(ruby_gc_stress_mode) & (1<<gc_stress_full_mark_after_malloc)))
#define | global_symbols ruby_global_symbols
#define | S(s) sym_##s = ID2SYM(rb_intern_const(#s))
#define | SET(name, attr)
#define | S(s) gc_stat_symbols[gc_stat_sym_##s] = ID2SYM(rb_intern_const(#s))
#define | S(s) gc_stat_compat_symbols[gc_stat_compat_sym_##s] = ID2SYM(rb_intern_const(#s))
#define | OLD_SYM(s) gc_stat_compat_symbols[gc_stat_compat_sym_##s]
#define | NEW_SYM(s) gc_stat_symbols[gc_stat_sym_##s]
#define | SET(name, attr)
#define | TRY_WITH_GC(alloc)
#define | WMAP_DELETE_DEAD_OBJECT_IN_MARK 0
#define | GC_PROFILE_RECORD_DEFAULT_SIZE 100
#define | RUBY_DTRACE_GC_HOOK(name) do {if (RUBY_DTRACE_GC_##name##_ENABLED()) RUBY_DTRACE_GC_##name();} while (0)
#define | TYPE_NAME(t) case (t): return #t;
#define | ARY_SHARED_P(ary)
#define | ARY_EMBED_P(ary)
#define | BUFF_ARGS buff + pos, buff_size - pos
#define | APPENDF(f) if ((pos += snprintf f) >= buff_size) goto end
#define | TF(c) ((c) != 0 ? "true" : "false")
#define | C(c, s) ((c) != 0 ? (s) : " ")
#define | IMEMO_NAME(x) case imemo_##x: imemo_name = #x; break;
#define | OPT(o) if (o) rb_ary_push(opts, rb_fstring_lit(#o))

## Typedefs
typedef struct gc_profile_record | gc_profile_record
typedef struct RVALUE | RVALUE
typedef uintptr_t | bits_t
typedef struct stack_chunk | stack_chunk_t
typedef struct mark_stack | mark_stack_t
typedef struct rb_heap_struct | rb_heap_t
typedef struct rb_objspace | rb_objspace_t
typedef int | each_obj_callback(void *, void *, size_t, void *)
typedef int | page_compare_func_t(const void *, const void *, void *)

## Enumerations
enum | gc_profile_record_flag { GPR_FLAG_NONE = 0x000, GPR_FLAG_MAJOR_BY_NOFREE = 0x001, GPR_FLAG_MAJOR_BY_OLDGEN = 0x002, GPR_FLAG_MAJOR_BY_SHADY = 0x004, GPR_FLAG_MAJOR_BY_FORCE = 0x008, GPR_FLAG_MAJOR_BY_OLDMALLOC = 0x020, GPR_FLAG_MAJOR_MASK = 0x0ff, GPR_FLAG_NEWOBJ = 0x100, GPR_FLAG_MALLOC = 0x200, GPR_FLAG_METHOD = 0x400, GPR_FLAG_CAPI = 0x800, GPR_FLAG_STRESS = 0x1000, GPR_FLAG_IMMEDIATE_SWEEP = 0x2000, GPR_FLAG_HAVE_FINALIZE = 0x4000, GPR_FLAG_IMMEDIATE_MARK = 0x8000, GPR_FLAG_FULL_MARK = 0x10000, GPR_DEFAULT_REASON }
enum | { BITS_SIZE = sizeof(bits_t), BITS_BITLENGTH = ( BITS_SIZE * CHAR_BIT ) }
enum | gc_mode { gc_mode_none, gc_mode_marking, gc_mode_sweeping }
enum | { HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG), HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)), REQUIRED_SIZE_BY_MALLOC = (sizeof(size_t) * 5), HEAP_PAGE_SIZE = (HEAP_PAGE_ALIGN - REQUIRED_SIZE_BY_MALLOC), HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)), HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH), HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT), HEAP_PAGE_BITMAP_PLANES = USE_RGENGC ? 4 : 1 }
enum | { gc_stress_no_major, gc_stress_no_immediate_sweep, gc_stress_full_mark_after_malloc, gc_stress_max }
enum | gc_stat_sym { gc_stat_sym_count, gc_stat_sym_heap_allocated_pages, gc_stat_sym_heap_sorted_length, gc_stat_sym_heap_allocatable_pages, gc_stat_sym_heap_available_slots, gc_stat_sym_heap_live_slots, gc_stat_sym_heap_free_slots, gc_stat_sym_heap_final_slots, gc_stat_sym_heap_marked_slots, gc_stat_sym_heap_eden_pages, gc_stat_sym_heap_tomb_pages, gc_stat_sym_total_allocated_pages, gc_stat_sym_total_freed_pages, gc_stat_sym_total_allocated_objects, gc_stat_sym_total_freed_objects, gc_stat_sym_malloc_increase_bytes, gc_stat_sym_malloc_increase_bytes_limit, gc_stat_sym_minor_gc_count, gc_stat_sym_major_gc_count, gc_stat_sym_compact_count, gc_stat_sym_remembered_wb_unprotected_objects, gc_stat_sym_remembered_wb_unprotected_objects_limit, gc_stat_sym_old_objects, gc_stat_sym_old_objects_limit, gc_stat_sym_oldmalloc_increase_bytes, gc_stat_sym_oldmalloc_increase_bytes_limit, gc_stat_sym_last }
enum | gc_stat_compat_sym { gc_stat_compat_sym_gc_stat_heap_used, gc_stat_compat_sym_heap_eden_page_length, gc_stat_compat_sym_heap_tomb_page_length, gc_stat_compat_sym_heap_increment, gc_stat_compat_sym_heap_length, gc_stat_compat_sym_heap_live_slot, gc_stat_compat_sym_heap_free_slot, gc_stat_compat_sym_heap_final_slot, gc_stat_compat_sym_heap_swept_slot, gc_stat_compat_sym_remembered_shady_object, gc_stat_compat_sym_remembered_shady_object_limit, gc_stat_compat_sym_old_object, gc_stat_compat_sym_old_object_limit, gc_stat_compat_sym_total_allocated_object, gc_stat_compat_sym_total_freed_object, gc_stat_compat_sym_malloc_increase, gc_stat_compat_sym_malloc_limit, gc_stat_compat_sym_oldmalloc_increase, gc_stat_compat_sym_oldmalloc_limit, gc_stat_compat_sym_last }
enum | memop_type { MEMOP_TYPE_MALLOC = 0, MEMOP_TYPE_FREE, MEMOP_TYPE_REALLOC }

## Functions
| PRINTF_ARGS (NORETURN(static void gc_raise(VALUE, const char *,...)), 2, 3)
size_t | rb_size_mul_or_raise (size_t x, size_t y, VALUE exc)
size_t | rb_size_mul_add_or_raise (size_t x, size_t y, size_t z, VALUE exc)
volatile VALUE * | rb_gc_guarded_ptr_val (volatile VALUE *ptr, VALUE val)
void | rb_iseq_mark (const rb_iseq_t *iseq)
void | rb_iseq_update_references (rb_iseq_t *iseq)
void | rb_iseq_free (const rb_iseq_t *iseq)
size_t | rb_iseq_memsize (const rb_iseq_t *iseq)
void | rb_vm_update_references (void *ptr)
void | rb_gcdebug_print_obj_condition (VALUE obj)
| NORETURN (static void negative_size_allocation_error(const char *))
| NO_SANITIZE ("memory", static void gc_mark_maybe(rb_objspace_t *objspace, VALUE ptr))
| NO_SANITIZE ("memory", static inline int is_pointer_to_heap(rb_objspace_t *objspace, void *ptr))
| PRINTF_ARGS (static void gc_report_body(int level, rb_objspace_t *objspace, const char *fmt,...), 3, 4)
rb_objspace_t * | rb_objspace_alloc (void)
void | rb_objspace_free (rb_objspace_t *objspace)
void | rb_objspace_set_event_hook (const rb_event_flag_t event)
| NOINLINE (static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace))
VALUE | rb_wb_unprotected_newobj_of (VALUE klass, VALUE flags)
VALUE | rb_wb_protected_newobj_of (VALUE klass, VALUE flags)
VALUE | rb_newobj (void)
VALUE | rb_newobj_of (VALUE klass, VALUE flags)
VALUE | rb_imemo_new (enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0)
rb_imemo_tmpbuf_t * | rb_imemo_tmpbuf_parser_heap (void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt)
VALUE | rb_data_object_wrap (VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
| RUBY_ALIAS_FUNCTION (rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree), rb_data_object_wrap,(klass, datap, dmark, dfree))
VALUE | rb_data_typed_object_wrap (VALUE klass, void *datap, const rb_data_type_t *type)
| RUBY_ALIAS_FUNCTION (rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type), rb_data_typed_object_wrap,(klass, datap, type))
size_t | rb_objspace_data_type_memsize (VALUE obj)
const char * | rb_objspace_data_type_name (VALUE obj)
void | rb_free_const_table (struct rb_id_table *tbl)
void | Init_heap (void)
void | Init_gc_stress (void)
void | rb_objspace_each_objects (each_obj_callback *callback, void *data)
void | rb_objspace_each_objects_without_setup (each_obj_callback *callback, void *data)
int | rb_objspace_internal_object_p (VALUE obj)
VALUE | rb_undefine_finalizer (VALUE obj)
VALUE | rb_define_finalizer (VALUE obj, VALUE block)
void | rb_gc_copy_finalizer (VALUE dest, VALUE obj)
void | rb_objspace_call_finalizer (rb_objspace_t *objspace)
| PUREFUNC (static inline int is_id_value(rb_objspace_t *objspace, VALUE ptr))
int | rb_objspace_markable_object_p (VALUE obj)
int | rb_objspace_garbage_object_p (VALUE obj)
VALUE | rb_memory_id (VALUE obj)
VALUE | rb_obj_id (VALUE obj)
size_t | rb_obj_memsize_of (VALUE obj)
int | ruby_get_stack_grow_direction (volatile VALUE *addr)
size_t | ruby_stack_length (VALUE **p)
MJIT_FUNC_EXPORTED int | rb_ec_stack_check (rb_execution_context_t *ec)
int | ruby_stack_check (void)
| ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS (static void mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n))
void | rb_gc_mark_locations (const VALUE *start, const VALUE *end)
void | rb_gc_mark_values (long n, const VALUE *values)
void | rb_gc_mark_vm_stack_values (long n, const VALUE *values)
void | rb_mark_set (st_table *tbl)
void | rb_mark_hash (st_table *tbl)
void | rb_gc_mark_machine_stack (const rb_execution_context_t *ec)
void | rb_mark_tbl (st_table *tbl)
void | rb_mark_tbl_no_pin (st_table *tbl)
void | rb_gc_mark_maybe (VALUE obj)
| NOINLINE (static void gc_mark_ptr(rb_objspace_t *objspace, VALUE obj))
void | rb_gc_mark_movable (VALUE ptr)
void | rb_gc_mark (VALUE ptr)
int | rb_objspace_marked_object_p (VALUE obj)
void | rb_gc_verify_internal_consistency (void)
| NOINLINE (static void gc_writebarrier_generational(VALUE a, VALUE b, rb_objspace_t *objspace))
void | rb_gc_writebarrier (VALUE a, VALUE b)
void | rb_gc_writebarrier_unprotect (VALUE obj)
MJIT_FUNC_EXPORTED void | rb_gc_writebarrier_remember (VALUE obj)
void | rb_gc_unprotect_logging (void *objptr, const char *filename, int line)
void | rb_copy_wb_protected_attribute (VALUE dest, VALUE obj)
VALUE | rb_obj_rgengc_writebarrier_protected_p (VALUE obj)
VALUE | rb_obj_rgengc_promoted_p (VALUE obj)
size_t | rb_obj_gc_flags (VALUE obj, ID *flags, size_t max)
void | rb_gc_force_recycle (VALUE obj)
void | rb_gc_register_mark_object (VALUE obj)
void | rb_gc_register_address (VALUE *addr)
void | rb_gc_unregister_address (VALUE *addr)
void | rb_global_variable (VALUE *var)
void | rb_gc_update_tbl_refs (st_table *ptr)
VALUE | rb_gc_location (VALUE value)
VALUE | rb_gc_start (void)
void | rb_gc (void)
int | rb_during_gc (void)
size_t | rb_gc_count (void)
VALUE | rb_gc_latest_gc_info (VALUE key)
size_t | rb_gc_stat (VALUE key)
VALUE | rb_gc_enable (void)
VALUE | rb_gc_disable_no_rest (void)
VALUE | rb_gc_disable (void)
void | ruby_gc_set_params (void)
void | rb_objspace_reachable_objects_from (VALUE obj, void(func)(VALUE, void *), void *data)
void | rb_objspace_reachable_objects_from_root (void(func)(const char *category, VALUE, void *), void *passing_data)
void | rb_memerror (void)
void * | rb_aligned_malloc (size_t alignment, size_t size)
void | rb_malloc_info_show_results (void)
void * | ruby_xmalloc_body (size_t size)
void | ruby_malloc_size_overflow (size_t count, size_t elsize)
void * | ruby_xmalloc2_body (size_t n, size_t size)
void * | ruby_xcalloc_body (size_t n, size_t size)
void * | ruby_sized_xrealloc (void *ptr, size_t new_size, size_t old_size)
void * | ruby_xrealloc_body (void *ptr, size_t new_size)
void * | ruby_sized_xrealloc2 (void *ptr, size_t n, size_t size, size_t old_n)
void * | ruby_xrealloc2_body (void *ptr, size_t n, size_t size)
void | ruby_sized_xfree (void *x, size_t size)
void | ruby_xfree (void *x)
void * | rb_xmalloc_mul_add (size_t x, size_t y, size_t z)
void * | rb_xrealloc_mul_add (const void *p, size_t x, size_t y, size_t z)
void * | rb_xmalloc_mul_add_mul (size_t x, size_t y, size_t z, size_t w)
void * | rb_xcalloc_mul_add_mul (size_t x, size_t y, size_t z, size_t w)
void * | ruby_mimmalloc (size_t size)
void | ruby_mimfree (void *ptr)
void * | rb_alloc_tmp_buffer_with_count (volatile VALUE *store, size_t size, size_t cnt)
void * | rb_alloc_tmp_buffer (volatile VALUE *store, long len)
void | rb_free_tmp_buffer (volatile VALUE *store)
void | rb_gc_adjust_memory_usage (ssize_t diff)
const char * | rb_method_type_name (rb_method_type_t type)
const char * | rb_raw_obj_info (char *buff, const int buff_size, VALUE obj)
const MJIT_FUNC_EXPORTED char * | rb_obj_info (VALUE obj)
void | rb_obj_info_dump (VALUE obj)
void | rb_obj_info_dump_loc (VALUE obj, const char *file, int line, const char *func)
void | Init_GC (void)
void * | ruby_xmalloc (size_t size)
void * | ruby_xmalloc2 (size_t n, size_t size)
void * | ruby_xcalloc (size_t n, size_t size)
void * | ruby_xrealloc (void *ptr, size_t new_size)
void * | ruby_xrealloc2 (void *ptr, size_t n, size_t new_size)

## Variables
volatile VALUE | rb_gc_guarded_val
int | ruby_rgengc_debug
VALUE * | ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress
VALUE | rb_mGC
int | ruby_disable_gc = 0
int | ruby_stack_grow_direction
rb_symbols_t | ruby_global_symbols
const struct st_hash_type | rb_hashtype_ident

## Macro Definition Documentation

## ◆ APPENDF

#define APPENDF | ( |  | f | ) | if ((pos += snprintf f) >= buff_size) goto end

## ◆ ARY_EMBED_P

#define ARY_EMBED_P | ( |  | ary | ) |

Value:
(GC_ASSERT(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
FL_TEST((ary), RARRAY_EMBED_FLAG)!=0)

Definition at line 11401 of file gc.c.

## ◆ ARY_SHARED_P

#define ARY_SHARED_P | ( |  | ary | ) |

Value:
(GC_ASSERT(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
FL_TEST((ary),ELTS_SHARED)!=0)

Definition at line 11398 of file gc.c.

## ◆ BITMAP_BIT

#define BITMAP_BIT | ( |  | p | ) | ((bits_t)1 << BITMAP_OFFSET(p))

Definition at line 883 of file gc.c.

## ◆ BITMAP_INDEX

#define BITMAP_INDEX | ( |  | p | ) | (NUM_IN_PAGE(p) / BITS_BITLENGTH )

Definition at line 881 of file gc.c.

## ◆ BITMAP_OFFSET

#define BITMAP_OFFSET | ( |  | p | ) | (NUM_IN_PAGE(p) & (BITS_BITLENGTH-1))

Definition at line 882 of file gc.c.

## ◆ BUFF_ARGS

#define BUFF_ARGS buff + pos, buff_size - pos

## ◆ C

#define C | ( |  | c,
|  |  | s
| ) |  | ((c) != 0 ? (s) : " ")

## ◆ CALC_EXACT_MALLOC_SIZE

#define CALC_EXACT_MALLOC_SIZE USE_GC_MALLOC_OBJ_INFO_DETAILS

Definition at line 470 of file gc.c.

## ◆ CEILDIV

#define CEILDIV | ( |  | i,
|  |  | mod
| ) |  | (((i) + (mod) - 1)/(mod))

Definition at line 833 of file gc.c.

## ◆ CLEAR_IN_BITMAP

#define CLEAR_IN_BITMAP | ( |  | bits,
|  |  | p
| ) |  | ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] & ~BITMAP_BIT(p))

Definition at line 888 of file gc.c.

## ◆ COUNT_TYPE

#define COUNT_TYPE | ( |  | t | ) | case (t): return ID2SYM(rb_intern(#t)); break;

## ◆ dont_gc

#define dont_gc objspace->flags.dont_gc

Definition at line 921 of file gc.c.

## ◆ during_gc

#define during_gc objspace->flags.during_gc

Definition at line 922 of file gc.c.

## ◆ finalizer_table

#define finalizer_table objspace->finalizer_table

Definition at line 924 of file gc.c.

## ◆ finalizing

#define finalizing objspace->atomic_flags.finalizing

Definition at line 923 of file gc.c.

## ◆ FL_CHECK2

#define FL_CHECK2 | ( |  | name,
|  |  | x,
|  |  | pred
| ) |  |

Value:
((RGENGC_CHECK_MODE && SPECIAL_CONST_P(x)) ? \
(rb_bug(name": SPECIAL_CONST (%p)", (void *)(x)), 0) : (pred))

Definition at line 1202 of file gc.c.

## ◆ FL_SET2

#define FL_SET2 | ( |  | x,
|  |  | f
| ) |  | FL_CHECK2("FL_SET2", x, RBASIC(x)->flags |= (f))

Definition at line 1206 of file gc.c.

## ◆ FL_TEST2

#define FL_TEST2 | ( |  | x,
|  |  | f
| ) |  | FL_CHECK2("FL_TEST2", x, FL_TEST_RAW((x),(f)) != 0)

Definition at line 1205 of file gc.c.

## ◆ FL_UNSET2

#define FL_UNSET2 | ( |  | x,
|  |  | f
| ) |  | FL_CHECK2("FL_UNSET2", x, RBASIC(x)->flags &= ~(f))

Definition at line 1207 of file gc.c.

## ◆ GC_ASSERT

#define GC_ASSERT | ( |  | expr | ) | RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr)

Definition at line 403 of file gc.c.

## ◆ GC_DEBUG

#define GC_DEBUG 0

Definition at line 365 of file gc.c.

## ◆ GC_DEBUG_STRESS_TO_CLASS

#define GC_DEBUG_STRESS_TO_CLASS 0

Definition at line 484 of file gc.c.

## ◆ GC_ENABLE_INCREMENTAL_MARK

#define GC_ENABLE_INCREMENTAL_MARK USE_RINCGC

Definition at line 464 of file gc.c.

## ◆ GC_ENABLE_LAZY_SWEEP

#define GC_ENABLE_LAZY_SWEEP 1

Definition at line 467 of file gc.c.

## ◆ gc_event_hook

#define gc_event_hook | ( |  | objspace,
|  |  | event,
|  |  | data
| ) |  |

Value:
do { \
if (UNLIKELY(gc_event_hook_needed_p(objspace, event))) { \
gc_event_hook_body(GET_EC(), (objspace), (event), (data)); \
} \
} while (0)

Definition at line 2102 of file gc.c.

## ◆ gc_event_hook_available_p

#define gc_event_hook_available_p | ( |  | objspace | ) | ((objspace)->flags.has_hook)

Definition at line 2099 of file gc.c.

## ◆ gc_event_hook_needed_p

#define gc_event_hook_needed_p | ( |  | objspace,
|  |  | event
| ) |  | ((objspace)->hook_events & (event))

Definition at line 2100 of file gc.c.

## ◆ GC_HEAP_FREE_SLOTS

#define GC_HEAP_FREE_SLOTS 4096

Definition at line 262 of file gc.c.

## ◆ GC_HEAP_FREE_SLOTS_GOAL_RATIO

#define GC_HEAP_FREE_SLOTS_GOAL_RATIO 0.40

Definition at line 278 of file gc.c.

## ◆ GC_HEAP_FREE_SLOTS_MAX_RATIO

#define GC_HEAP_FREE_SLOTS_MAX_RATIO 0.65

Definition at line 281 of file gc.c.

## ◆ GC_HEAP_FREE_SLOTS_MIN_RATIO

#define GC_HEAP_FREE_SLOTS_MIN_RATIO 0.20

Definition at line 275 of file gc.c.

## ◆ GC_HEAP_GROWTH_FACTOR

#define GC_HEAP_GROWTH_FACTOR 1.8

Definition at line 265 of file gc.c.

## ◆ GC_HEAP_GROWTH_MAX_SLOTS

#define GC_HEAP_GROWTH_MAX_SLOTS 0 /* 0 is disable */

Definition at line 268 of file gc.c.

## ◆ GC_HEAP_INIT_SLOTS

#define GC_HEAP_INIT_SLOTS 10000

Definition at line 259 of file gc.c.

## ◆ GC_HEAP_OLDOBJECT_LIMIT_FACTOR

#define GC_HEAP_OLDOBJECT_LIMIT_FACTOR 2.0

Definition at line 271 of file gc.c.

## ◆ GC_MALLOC_LIMIT_GROWTH_FACTOR

#define GC_MALLOC_LIMIT_GROWTH_FACTOR 1.4

Definition at line 291 of file gc.c.

## ◆ GC_MALLOC_LIMIT_MAX

#define GC_MALLOC_LIMIT_MAX (32 * 1024 * 1024 /* 32MB */)

Definition at line 288 of file gc.c.

## ◆ GC_MALLOC_LIMIT_MIN

#define GC_MALLOC_LIMIT_MIN (16 * 1024 * 1024 /* 16MB */)

Definition at line 285 of file gc.c.

## ◆ gc_mode

#define gc_mode | ( |  | objspace | ) | gc_mode_verify((enum gc_mode)(objspace)->flags.mode)

Definition at line 950 of file gc.c.

## ◆ gc_mode_set

#define gc_mode_set | ( |  | objspace,
|  |  | mode
| ) |  | ((objspace)->flags.mode = (unsigned int)gc_mode_verify(mode))

Definition at line 951 of file gc.c.

## ◆ GC_NOTIFY

#define GC_NOTIFY 0

Definition at line 7117 of file gc.c.

## ◆ GC_OLDMALLOC_LIMIT_GROWTH_FACTOR

#define GC_OLDMALLOC_LIMIT_GROWTH_FACTOR 1.2

Definition at line 298 of file gc.c.

## ◆ GC_OLDMALLOC_LIMIT_MAX

#define GC_OLDMALLOC_LIMIT_MAX (128 * 1024 * 1024 /* 128MB */)

Definition at line 301 of file gc.c.

## ◆ GC_OLDMALLOC_LIMIT_MIN

#define GC_OLDMALLOC_LIMIT_MIN (16 * 1024 * 1024 /* 16MB */)

Definition at line 295 of file gc.c.

## ◆ gc_prof_enabled

#define gc_prof_enabled | ( |  | objspace | ) | ((objspace)->profile.run && (objspace)->profile.current_record)

Definition at line 1086 of file gc.c.

## ◆ gc_prof_record

#define gc_prof_record | ( |  | objspace | ) | (objspace)->profile.current_record

Definition at line 1085 of file gc.c.

## ◆ GC_PROFILE_DETAIL_MEMORY

#define GC_PROFILE_DETAIL_MEMORY 0

Definition at line 461 of file gc.c.

## ◆ GC_PROFILE_MORE_DETAIL

#define GC_PROFILE_MORE_DETAIL 0

Definition at line 458 of file gc.c.

## ◆ GC_PROFILE_RECORD_DEFAULT_SIZE

#define GC_PROFILE_RECORD_DEFAULT_SIZE 100

Definition at line 10731 of file gc.c.

## ◆ gc_report

#define gc_report if (!RGENGC_DEBUG_ENABLED(0)) {} else gc_report_body

Definition at line 1092 of file gc.c.

## ◆ gc_stress_full_mark_after_malloc_p

#define gc_stress_full_mark_after_malloc_p | ( |  | ) | (FIXNUM_P(ruby_gc_stress_mode) && (FIX2LONG(ruby_gc_stress_mode) & (1<<gc_stress_full_mark_after_malloc)))

Definition at line 7126 of file gc.c.

## ◆ GET_HEAP_MARK_BITS

#define GET_HEAP_MARK_BITS | ( |  | x | ) | (&GET_HEAP_PAGE(x)->mark_bits[0])

Definition at line 891 of file gc.c.

## ◆ GET_HEAP_MARKING_BITS

#define GET_HEAP_MARKING_BITS | ( |  | x | ) | (&GET_HEAP_PAGE(x)->marking_bits[0])

Definition at line 896 of file gc.c.

## ◆ GET_HEAP_PAGE

#define GET_HEAP_PAGE | ( |  | x | ) | (GET_PAGE_HEADER(x)->page)

Definition at line 878 of file gc.c.

## ◆ GET_HEAP_PINNED_BITS

#define GET_HEAP_PINNED_BITS | ( |  | x | ) | (&GET_HEAP_PAGE(x)->pinned_bits[0])

Definition at line 892 of file gc.c.

## ◆ GET_HEAP_UNCOLLECTIBLE_BITS

#define GET_HEAP_UNCOLLECTIBLE_BITS | ( |  | x | ) | (&GET_HEAP_PAGE(x)->uncollectible_bits[0])

Definition at line 894 of file gc.c.

## ◆ GET_HEAP_WB_UNPROTECTED_BITS

#define GET_HEAP_WB_UNPROTECTED_BITS | ( |  | x | ) | (&GET_HEAP_PAGE(x)->wb_unprotected_bits[0])

Definition at line 895 of file gc.c.

## ◆ GET_PAGE_BODY

#define GET_PAGE_BODY | ( |  | x | ) | ((struct heap_page_body *)((bits_t)(x) & ~(HEAP_PAGE_ALIGN_MASK)))

Definition at line 876 of file gc.c.

## ◆ GET_PAGE_HEADER

#define GET_PAGE_HEADER | ( |  | x | ) | (&GET_PAGE_BODY(x)->header)

Definition at line 877 of file gc.c.

## ◆ GET_STACK_BOUNDS

#define GET_STACK_BOUNDS | ( |  | start,
|  |  | end,
|  |  | appendix
| ) |  |

Value:
((STACK_END < STACK_START) ? \
((start) = STACK_END, (end) = STACK_START) : ((start) = STACK_START, (end) = STACK_END+(appendix)))

Definition at line 4947 of file gc.c.

## ◆ global_list

#define global_list objspace->global_list

Definition at line 925 of file gc.c.

## ◆ global_symbols

#define global_symbols ruby_global_symbols

Definition at line 8407 of file gc.c.

## ◆ has_sweeping_pages

#define has_sweeping_pages | ( |  | heap | ) | ((heap)->sweeping_page != 0)

Definition at line 970 of file gc.c.

## ◆ heap_allocatable_pages

#define heap_allocatable_pages objspace->heap_pages.allocatable_pages

Definition at line 915 of file gc.c.

## ◆ heap_allocated_pages

#define heap_allocated_pages objspace->heap_pages.allocated_pages

Definition at line 911 of file gc.c.

## ◆ heap_eden

#define heap_eden (&objspace->eden_heap)

Definition at line 919 of file gc.c.

## ◆ HEAP_PAGE_ALIGN_LOG

#define HEAP_PAGE_ALIGN_LOG 14

Definition at line 832 of file gc.c.

## ◆ heap_pages_deferred_final

#define heap_pages_deferred_final objspace->heap_pages.deferred_final

Definition at line 918 of file gc.c.

## ◆ heap_pages_final_slots

#define heap_pages_final_slots objspace->heap_pages.final_slots

Definition at line 917 of file gc.c.

## ◆ heap_pages_freeable_pages

#define heap_pages_freeable_pages objspace->heap_pages.freeable_pages

Definition at line 916 of file gc.c.

## ◆ heap_pages_himem

#define heap_pages_himem objspace->heap_pages.range[1]

Definition at line 914 of file gc.c.

## ◆ heap_pages_lomem

#define heap_pages_lomem objspace->heap_pages.range[0]

Definition at line 913 of file gc.c.

## ◆ heap_pages_sorted

#define heap_pages_sorted objspace->heap_pages.sorted

Definition at line 910 of file gc.c.

## ◆ heap_pages_sorted_length

#define heap_pages_sorted_length objspace->heap_pages.sorted_length

Definition at line 912 of file gc.c.

## ◆ heap_tomb

#define heap_tomb (&objspace->tomb_heap)

Definition at line 920 of file gc.c.

## ◆ I

#define I | ( |  | s | ) | ID_##s = rb_intern(#s);

## ◆ IMEMO_NAME

#define IMEMO_NAME | ( |  | x | ) | case imemo_##x: imemo_name = #x; break;

## ◆ is_full_marking

#define is_full_marking | ( |  | objspace | ) | ((objspace)->flags.during_minor_gc == FALSE)

Definition at line 956 of file gc.c.

## ◆ is_incremental_marking

#define is_incremental_marking | ( |  | objspace | ) | ((objspace)->flags.during_incremental_marking != FALSE)

Definition at line 961 of file gc.c.

## ◆ is_lazy_sweeping

#define is_lazy_sweeping | ( |  | heap | ) | (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap))

Definition at line 971 of file gc.c.

## ◆ is_marking

#define is_marking | ( |  | objspace | ) | (gc_mode(objspace) == gc_mode_marking)

Definition at line 953 of file gc.c.

## ◆ is_sweeping

#define is_sweeping | ( |  | objspace | ) | (gc_mode(objspace) == gc_mode_sweeping)

Definition at line 954 of file gc.c.

## ◆ MALLOC_ALLOCATED_SIZE

#define MALLOC_ALLOCATED_SIZE 0

Definition at line 477 of file gc.c.

## ◆ malloc_allocated_size

#define malloc_allocated_size objspace->malloc_params.allocated_size

Definition at line 909 of file gc.c.

## ◆ MALLOC_ALLOCATED_SIZE_CHECK

#define MALLOC_ALLOCATED_SIZE_CHECK 0

Definition at line 480 of file gc.c.

## ◆ malloc_increase

#define malloc_increase objspace->malloc_params.increase

Definition at line 908 of file gc.c.

## ◆ malloc_limit

#define malloc_limit objspace->malloc_params.limit

Definition at line 907 of file gc.c.

## ◆ MARK_CHECKPOINT

#define MARK_CHECKPOINT | ( |  | category | ) |

Value:
do { \
if (categoryp) *categoryp = category; \
MARK_CHECKPOINT_PRINT_TICK(category); \
} while (0)

## ◆ MARK_CHECKPOINT_PRINT_TICK

#define MARK_CHECKPOINT_PRINT_TICK | ( |  | category | ) |

## ◆ MARK_IN_BITMAP

#define MARK_IN_BITMAP | ( |  | bits,
|  |  | p
| ) |  | ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] | BITMAP_BIT(p))

Definition at line 887 of file gc.c.

## ◆ MARK_OBJECT_ARY_BUCKET_SIZE

#define MARK_OBJECT_ARY_BUCKET_SIZE 1024

Definition at line 7059 of file gc.c.

## ◆ MARKED_IN_BITMAP

#define MARKED_IN_BITMAP | ( |  | bits,
|  |  | p
| ) |  | ((bits)[BITMAP_INDEX(p)] & BITMAP_BIT(p))

Definition at line 886 of file gc.c.

## ◆ MEASURE_LINE

#define MEASURE_LINE | ( |  | expr | ) | expr

Definition at line 1199 of file gc.c.

## ◆ NEW_SYM

#define NEW_SYM | ( |  | s | ) | gc_stat_symbols[gc_stat_sym_##s]

## ◆ nomem_error

#define nomem_error GET_VM()->special_exceptions[ruby_error_nomemory]

Definition at line 995 of file gc.c.

## ◆ nonspecial_obj_id

#define nonspecial_obj_id | ( |  | obj | ) | (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)

Definition at line 974 of file gc.c.

## ◆ NUM2PTR

#define NUM2PTR | ( |  | x | ) | NUM2ULONG(x)

## ◆ NUM_IN_PAGE

#define NUM_IN_PAGE | ( |  | p | ) | (((bits_t)(p) & HEAP_PAGE_ALIGN_MASK)/sizeof(RVALUE))

Definition at line 880 of file gc.c.

## ◆ OBJ_ID_INCREMENT

#define OBJ_ID_INCREMENT (sizeof(RVALUE) / 2)

Definition at line 2881 of file gc.c.

## ◆ OBJ_ID_INITIAL

#define OBJ_ID_INITIAL (OBJ_ID_INCREMENT * 2)

Definition at line 2882 of file gc.c.

## ◆ obj_id_to_ref

#define obj_id_to_ref | ( |  | objid | ) | ((objid) ^ FIXNUM_FLAG) /* unset FIXNUM_FLAG */

Definition at line 975 of file gc.c.

## ◆ OLD_SYM

#define OLD_SYM | ( |  | s | ) | gc_stat_compat_symbols[gc_stat_compat_sym_##s]

## ◆ OPT

#define OPT | ( |  | o | ) | if (o) rb_ary_push(opts, rb_fstring_lit(#o))

## ◆ POP_MARK_FUNC_DATA

#define POP_MARK_FUNC_DATA | ( |  | ) | objspace->mark_func_data = prev_mark_func_data;} while (0)

Definition at line 1101 of file gc.c.

## ◆ popcount_bits

#define popcount_bits rb_popcount_intptr

Definition at line 623 of file gc.c.

## ◆ PREVENT_STACK_OVERFLOW

#define PREVENT_STACK_OVERFLOW 1

Definition at line 4639 of file gc.c.

## ◆ PRINT_ENTER_EXIT_TICK

#define PRINT_ENTER_EXIT_TICK 0

Definition at line 308 of file gc.c.

## ◆ PRINT_MEASURE_LINE

#define PRINT_MEASURE_LINE 0

Definition at line 305 of file gc.c.

## ◆ PRINT_ROOT_TICKS

#define PRINT_ROOT_TICKS 0

Definition at line 311 of file gc.c.

## ◆ PROFILE_REMEMBERSET_MARK

#define PROFILE_REMEMBERSET_MARK 0

Definition at line 6653 of file gc.c.

## ◆ PUSH_MARK_FUNC_DATA

#define PUSH_MARK_FUNC_DATA | ( |  | v | ) |

Value:
do { \
struct mark_func_data_struct *prev_mark_func_data = objspace->mark_func_data; \
objspace->mark_func_data = (v);

Definition at line 1097 of file gc.c.

## ◆ RANY

#define RANY | ( |  | o | ) | ((RVALUE*)(o))

Definition at line 984 of file gc.c.

## ◆ rb_data_object_alloc

#define rb_data_object_alloc rb_data_object_alloc

Definition at line 14 of file gc.c.

## ◆ rb_data_typed_object_alloc

#define rb_data_typed_object_alloc rb_data_typed_object_alloc

Definition at line 15 of file gc.c.

## ◆ rb_jmp_buf

#define rb_jmp_buf rb_jmpbuf_t

Definition at line 82 of file gc.c.

## ◆ rb_objspace

#define rb_objspace (*rb_objspace_of(GET_VM()))

Definition at line 900 of file gc.c.

## ◆ rb_objspace_of

#define rb_objspace_of | ( |  | vm | ) | ((vm)->objspace)

Definition at line 901 of file gc.c.

## ◆ rb_setjmp

#define rb_setjmp | ( |  | env | ) | RUBY_SETJMP(env)

Definition at line 81 of file gc.c.

## ◆ RESTORE_FINALIZER

#define RESTORE_FINALIZER | ( |  | ) |

Value:
(\
ec->cfp = saved.cfp, \
rb_set_errinfo(saved.errinfo))

## ◆ RGENGC_CHECK_MODE

#define RGENGC_CHECK_MODE 0

Definition at line 399 of file gc.c.

## ◆ RGENGC_DEBUG

#define RGENGC_DEBUG 0

Definition at line 380 of file gc.c.

## ◆ RGENGC_DEBUG_ENABLED

#define RGENGC_DEBUG_ENABLED | ( |  | level | ) | ((RGENGC_DEBUG) >= (level))

Definition at line 386 of file gc.c.

## ◆ RGENGC_ESTIMATE_OLDMALLOC

#define RGENGC_ESTIMATE_OLDMALLOC 1

Definition at line 431 of file gc.c.

## ◆ RGENGC_FORCE_MAJOR_GC

#define RGENGC_FORCE_MAJOR_GC 0

Definition at line 438 of file gc.c.

## ◆ RGENGC_OBJ_INFO

#define RGENGC_OBJ_INFO (RGENGC_DEBUG | RGENGC_CHECK_MODE)

Definition at line 488 of file gc.c.

## ◆ RGENGC_OLD_NEWOBJ_CHECK

#define RGENGC_OLD_NEWOBJ_CHECK 0

Definition at line 412 of file gc.c.

## ◆ RGENGC_PROFILE

#define RGENGC_PROFILE 0

Definition at line 421 of file gc.c.

## ◆ RUBY_DTRACE_GC_HOOK

#define RUBY_DTRACE_GC_HOOK | ( |  | name | ) | do {if (RUBY_DTRACE_GC_##name##_ENABLED()) RUBY_DTRACE_GC_##name();} while (0)

Definition at line 10870 of file gc.c.

## ◆ ruby_gc_stress_mode

#define ruby_gc_stress_mode objspace->gc_stress_mode

Definition at line 927 of file gc.c.

## ◆ ruby_gc_stressful

#define ruby_gc_stressful objspace->flags.gc_stressful

Definition at line 926 of file gc.c.

## ◆ ruby_initial_gc_stress

#define ruby_initial_gc_stress gc_params.gc_stress

Definition at line 903 of file gc.c.

## ◆ RVALUE_AGE_SHIFT

#define RVALUE_AGE_SHIFT 5 /* FL_PROMOTED0 bit */

Definition at line 1223 of file gc.c.

## ◆ RVALUE_MARK_BITMAP

#define RVALUE_MARK_BITMAP | ( |  | obj | ) | MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), (obj))

Definition at line 1209 of file gc.c.

## ◆ RVALUE_MARKING_BITMAP

#define RVALUE_MARKING_BITMAP | ( |  | obj | ) | MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), (obj))

Definition at line 1216 of file gc.c.

## ◆ RVALUE_OLD_AGE

#define RVALUE_OLD_AGE 3

Definition at line 1222 of file gc.c.

## ◆ RVALUE_PAGE_MARKED

#define RVALUE_PAGE_MARKED | ( |  | page,
|  |  | obj
| ) |  | MARKED_IN_BITMAP((page)->mark_bits, (obj))

Definition at line 1211 of file gc.c.

## ◆ RVALUE_PAGE_MARKING

#define RVALUE_PAGE_MARKING | ( |  | page,
|  |  | obj
| ) |  | MARKED_IN_BITMAP((page)->marking_bits, (obj))

Definition at line 1220 of file gc.c.

## ◆ RVALUE_PAGE_UNCOLLECTIBLE

#define RVALUE_PAGE_UNCOLLECTIBLE | ( |  | page,
|  |  | obj
| ) |  | MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))

Definition at line 1219 of file gc.c.

## ◆ RVALUE_PAGE_WB_UNPROTECTED

#define RVALUE_PAGE_WB_UNPROTECTED | ( |  | page,
|  |  | obj
| ) |  | MARKED_IN_BITMAP((page)->wb_unprotected_bits, (obj))

Definition at line 1218 of file gc.c.

## ◆ RVALUE_PIN_BITMAP

#define RVALUE_PIN_BITMAP | ( |  | obj | ) | MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), (obj))

Definition at line 1210 of file gc.c.

## ◆ RVALUE_UNCOLLECTIBLE_BITMAP

#define RVALUE_UNCOLLECTIBLE_BITMAP | ( |  | obj | ) | MARKED_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), (obj))

Definition at line 1215 of file gc.c.

## ◆ RVALUE_WB_UNPROTECTED_BITMAP

#define RVALUE_WB_UNPROTECTED_BITMAP | ( |  | obj | ) | MARKED_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), (obj))

Definition at line 1214 of file gc.c.

## ◆ RZOMBIE

#define RZOMBIE | ( |  | o | ) | ((struct RZombie *)(o))

Definition at line 993 of file gc.c.

## ◆ S [1/3]

#define S | ( |  | s | ) | sym_##s = ID2SYM(rb_intern_const(#s))

## ◆ S [2/3]

#define S | ( |  | s | ) | gc_stat_symbols[gc_stat_sym_##s] = ID2SYM(rb_intern_const(#s))

## ◆ S [3/3]

#define S | ( |  | s | ) | gc_stat_compat_symbols[gc_stat_compat_sym_##s] = ID2SYM(rb_intern_const(#s))

## ◆ SET [1/2]

#define SET | ( |  | name,
|  |  | attr
| ) |  |

Value:
if (key == sym_##name) \
return (attr); \
else if (hash != Qnil) \
rb_hash_aset(hash, sym_##name, (attr));

## ◆ SET [2/2]

#define SET | ( |  | name,
|  |  | attr
| ) |  |

Value:
if (key == gc_stat_symbols[gc_stat_sym_##name]) \
return attr; \
else if (hash != Qnil) \
rb_hash_aset(hash, gc_stat_symbols[gc_stat_sym_##name], SIZET2NUM(attr));

## ◆ SET_STACK_END

#define SET_STACK_END SET_MACHINE_STACK_END(&ec->machine.stack_end)

Definition at line 4598 of file gc.c.

## ◆ STACK_CHUNK_SIZE

#define STACK_CHUNK_SIZE 500

Definition at line 640 of file gc.c.

## ◆ STACK_END

#define STACK_END (ec->machine.stack_end)

Definition at line 4601 of file gc.c.

## ◆ STACK_LENGTH

#define STACK_LENGTH

Value:
((STACK_END < STACK_START) ? (size_t)(STACK_START - STACK_END) \
: (size_t)(STACK_END - STACK_START + 1))

Definition at line 4614 of file gc.c.

## ◆ STACK_LEVEL_MAX

#define STACK_LEVEL_MAX (ec->machine.stack_maxsize/sizeof(VALUE))

Definition at line 4602 of file gc.c.

## ◆ STACK_START

#define STACK_START (ec->machine.stack_start)

Definition at line 4600 of file gc.c.

## ◆ STACKFRAME_FOR_CALL_CFUNC

#define STACKFRAME_FOR_CALL_CFUNC 2048

Definition at line 4662 of file gc.c.

## ◆ stress_to_class

#define stress_to_class 0

Definition at line 931 of file gc.c.

## ◆ TF

#define TF | ( |  | c | ) | ((c) != 0 ? "true" : "false")

## ◆ TICK_TYPE

#define TICK_TYPE 1

Definition at line 315 of file gc.c.

## ◆ TRY_WITH_GC

#define TRY_WITH_GC | ( |  | alloc | ) |

Value:
do { \
objspace_malloc_gc_stress(objspace); \
if (!(alloc) && \
(!garbage_collect_with_gvl(objspace, GPR_FLAG_FULL_MARK | \
GPR_FLAG_IMMEDIATE_MARK | GPR_FLAG_IMMEDIATE_SWEEP | \
GPR_FLAG_MALLOC) || \
!(alloc))) { \
ruby_memerror(); \
} \
} while (0)

Definition at line 9821 of file gc.c.

## ◆ TYPE_NAME

#define TYPE_NAME | ( |  | t | ) | case (t): return #t;

## ◆ TYPED_UPDATE_IF_MOVED

#define TYPED_UPDATE_IF_MOVED | ( |  | _objspace,
|  |  | _type,
|  |  | _thing
| ) |  |

Value:
do { \
if (gc_object_moved_p(_objspace, (VALUE)_thing)) { \
*((_type *)(&_thing)) = (_type)RMOVED((_thing))->destination; \
} \
} while (0)

Definition at line 1077 of file gc.c.

## ◆ UNEXPECTED_NODE

#define UNEXPECTED_NODE | ( |  | func | ) |

Value:
rb_bug(#func"(): GC does not handle T_NODE 0x%x(%p) 0x%"PRIxVALUE, \
BUILTIN_TYPE(obj), (void*)(obj), RBASIC(obj)->flags)

Definition at line 2299 of file gc.c.

## ◆ UPDATE_IF_MOVED

#define UPDATE_IF_MOVED | ( |  | _objspace,
|  |  | _thing
| ) |  | TYPED_UPDATE_IF_MOVED(_objspace, VALUE, _thing)

Definition at line 1083 of file gc.c.

## ◆ USE_TICK_T

#define USE_TICK_T (PRINT_ENTER_EXIT_TICK || PRINT_MEASURE_LINE || PRINT_ROOT_TICKS)

Definition at line 314 of file gc.c.

## ◆ will_be_incremental_marking

#define will_be_incremental_marking | ( |  | objspace | ) | ((objspace)->rgengc.need_major_gc != GPR_FLAG_NONE)

Definition at line 966 of file gc.c.

## ◆ WMAP_DELETE_DEAD_OBJECT_IN_MARK

#define WMAP_DELETE_DEAD_OBJECT_IN_MARK 0

Definition at line 10321 of file gc.c.

## Typedef Documentation

## ◆ bits_t

typedef uintptr_t bits_t

Definition at line 618 of file gc.c.

## ◆ each_obj_callback

typedef int each_obj_callback(void *, void *, size_t, void *)

Definition at line 2936 of file gc.c.

## ◆ gc_profile_record

typedef struct gc_profile_record gc_profile_record

## ◆ mark_stack_t

typedef struct mark_stack mark_stack_t

## ◆ page_compare_func_t

typedef int page_compare_func_t(const void *, const void *, void *)

Definition at line 7766 of file gc.c.

## ◆ rb_heap_t

typedef struct rb_heap_struct rb_heap_t

## ◆ rb_objspace_t

typedef struct rb_objspace rb_objspace_t

## ◆ RVALUE

typedef struct RVALUE RVALUE

## ◆ stack_chunk_t

typedef struct stack_chunk stack_chunk_t

## Enumeration Type Documentation

## ◆ anonymous enum

anonymous enum

Enumerator
BITS_SIZE |
BITS_BITLENGTH |

Definition at line 619 of file gc.c.

## ◆ anonymous enum

anonymous enum

Enumerator
HEAP_PAGE_ALIGN |
HEAP_PAGE_ALIGN_MASK |
REQUIRED_SIZE_BY_MALLOC |
HEAP_PAGE_SIZE |
HEAP_PAGE_OBJ_LIMIT |
HEAP_PAGE_BITMAP_LIMIT |
HEAP_PAGE_BITMAP_SIZE |
HEAP_PAGE_BITMAP_PLANES |

Definition at line 834 of file gc.c.

## ◆ anonymous enum

anonymous enum

Enumerator
gc_stress_no_major |
gc_stress_no_immediate_sweep |
gc_stress_full_mark_after_malloc |
gc_stress_max |

Definition at line 7119 of file gc.c.

## ◆ gc_mode

enum gc_mode

Enumerator
gc_mode_none |
gc_mode_marking |
gc_mode_sweeping |

Definition at line 670 of file gc.c.

## ◆ gc_profile_record_flag

enum gc_profile_record_flag

Enumerator
GPR_FLAG_NONE |
GPR_FLAG_MAJOR_BY_NOFREE |
GPR_FLAG_MAJOR_BY_OLDGEN |
GPR_FLAG_MAJOR_BY_SHADY |
GPR_FLAG_MAJOR_BY_FORCE |
GPR_FLAG_MAJOR_BY_OLDMALLOC |
GPR_FLAG_MAJOR_MASK |
GPR_FLAG_NEWOBJ |
GPR_FLAG_MALLOC |
GPR_FLAG_METHOD |
GPR_FLAG_CAPI |
GPR_FLAG_STRESS |
GPR_FLAG_IMMEDIATE_SWEEP |
GPR_FLAG_HAVE_FINALIZE |
GPR_FLAG_IMMEDIATE_MARK |
GPR_FLAG_FULL_MARK |
GPR_DEFAULT_REASON |

Definition at line 491 of file gc.c.

## ◆ gc_stat_compat_sym

enum gc_stat_compat_sym

Enumerator
gc_stat_compat_sym_gc_stat_heap_used |
gc_stat_compat_sym_heap_eden_page_length |
gc_stat_compat_sym_heap_tomb_page_length |
gc_stat_compat_sym_heap_increment |
gc_stat_compat_sym_heap_length |
gc_stat_compat_sym_heap_live_slot |
gc_stat_compat_sym_heap_free_slot |
gc_stat_compat_sym_heap_final_slot |
gc_stat_compat_sym_heap_swept_slot |
gc_stat_compat_sym_remembered_shady_object |
gc_stat_compat_sym_remembered_shady_object_limit |
gc_stat_compat_sym_old_object |
gc_stat_compat_sym_old_object_limit |
gc_stat_compat_sym_total_allocated_object |
gc_stat_compat_sym_total_freed_object |
gc_stat_compat_sym_malloc_increase |
gc_stat_compat_sym_malloc_limit |
gc_stat_compat_sym_oldmalloc_increase |
gc_stat_compat_sym_oldmalloc_limit |
gc_stat_compat_sym_last |

Definition at line 8879 of file gc.c.

## ◆ gc_stat_sym

enum gc_stat_sym

Enumerator
gc_stat_sym_count |
gc_stat_sym_heap_allocated_pages |
gc_stat_sym_heap_sorted_length |
gc_stat_sym_heap_allocatable_pages |
gc_stat_sym_heap_available_slots |
gc_stat_sym_heap_live_slots |
gc_stat_sym_heap_free_slots |
gc_stat_sym_heap_final_slots |
gc_stat_sym_heap_marked_slots |
gc_stat_sym_heap_eden_pages |
gc_stat_sym_heap_tomb_pages |
gc_stat_sym_total_allocated_pages |
gc_stat_sym_total_freed_pages |
gc_stat_sym_total_allocated_objects |
gc_stat_sym_total_freed_objects |
gc_stat_sym_malloc_increase_bytes |
gc_stat_sym_malloc_increase_bytes_limit |
gc_stat_sym_minor_gc_count |
gc_stat_sym_major_gc_count |
gc_stat_sym_compact_count |
gc_stat_sym_remembered_wb_unprotected_objects |
gc_stat_sym_remembered_wb_unprotected_objects_limit |
gc_stat_sym_old_objects |
gc_stat_sym_old_objects_limit |
gc_stat_sym_oldmalloc_increase_bytes |
gc_stat_sym_oldmalloc_increase_bytes_limit |
gc_stat_sym_last |

Definition at line 8837 of file gc.c.

## ◆ memop_type

enum memop_type

Enumerator
MEMOP_TYPE_MALLOC |
MEMOP_TYPE_FREE |
MEMOP_TYPE_REALLOC |

Definition at line 9667 of file gc.c.

## Function Documentation

## ◆ ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS()

ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS | ( | static void | mark_locations_arrayrb_objspace_t *objspace, register const VALUE *x, register long n | ) |

## ◆ Init_GC()

void Init_GC | ( | void |  | ) |

Definition at line 11832 of file gc.c.

References HEAP_PAGE_BITMAP_PLANES, HEAP_PAGE_BITMAP_SIZE, HEAP_PAGE_OBJ_LIMIT, ID2SYM, OBJ_FREEZE, rb_define_const(), rb_define_module(), rb_define_module_under(), rb_define_singleton_method(), rb_hash_aset(), rb_hash_new(), rb_intern, rb_mGC, and SIZET2NUM.

## ◆ Init_gc_stress()

void Init_gc_stress | ( | void |  | ) |

Definition at line 2929 of file gc.c.

References rb_objspace.

## ◆ Init_heap()

void Init_heap | ( | void |  | ) |

Definition at line 2909 of file gc.c.

References rb_objspace::id_to_obj_tbl, INT2FIX, rb_objspace::next_object_id, OBJ_ID_INITIAL, rb_objspace, and st_init_table().

Referenced by ruby_setup().

## ◆ NO_SANITIZE() [1/2]

NO_SANITIZE | ( | "memory" | ,
|  | static inline int | is_pointer_to_heaprb_objspace_t *objspace, void *ptr
| ) |  |

## ◆ NO_SANITIZE() [2/2]

NO_SANITIZE | ( | "memory" | ,
|  | static void | gc_mark_mayberb_objspace_t *objspace, VALUE ptr
| ) |  |

## ◆ NOINLINE() [1/3]

NOINLINE | ( | static VALUE | newobj_slowpath_wb_protectedVALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace | ) |

## ◆ NOINLINE() [2/3]

NOINLINE | ( | static void | gc_mark_ptrrb_objspace_t *objspace, VALUE obj | ) |

## ◆ NOINLINE() [3/3]

NOINLINE | ( | static void | gc_writebarrier_generationalVALUE a, VALUE b, rb_objspace_t *objspace | ) |

## ◆ NORETURN()

NORETURN | ( | static void | negative_size_allocation_errorconst char * | ) |

## ◆ PRINTF_ARGS() [1/2]

PRINTF_ARGS | ( | NORETURN(static void gc_raise(VALUE, const char *,...)) | ,
|  | 2 | ,
|  | 3 |
| ) |  |

## ◆ PRINTF_ARGS() [2/2]

PRINTF_ARGS | ( | static void | gc_report_bodyint level, rb_objspace_t *objspace, const char *fmt,...,
|  | 3 | ,
|  | 4 |
| ) |  |

## ◆ PUREFUNC()

PUREFUNC | ( | static inline int | is_id_valuerb_objspace_t *objspace, VALUE ptr | ) |

## ◆ rb_aligned_malloc()

void* rb_aligned_malloc | ( | size_t | alignment,
|  | size_t | size
| ) |  |

Definition at line 9610 of file gc.c.

References GC_ASSERT, malloc(), memalign(), NULL, posix_memalign(), and size.

## ◆ rb_alloc_tmp_buffer_with_count()

void* rb_alloc_tmp_buffer_with_count | ( | volatile VALUE * | store,
|  | size_t | size,
|  | size_t | cnt
| ) |  |

Definition at line 10227 of file gc.c.

References imemo, and ptr.

Referenced by rb_alloc_tmp_buffer().

## ◆ rb_copy_wb_protected_attribute()

void rb_copy_wb_protected_attribute | ( | VALUE | dest,
|  | VALUE | obj
| ) |  |

Definition at line 6938 of file gc.c.

References rb_objspace.

## ◆ rb_data_object_wrap()

VALUE rb_data_object_wrap | ( | VALUE | klass,
|  | void * | datap,
|  | RUBY_DATA_FUNC | dmark,
|  | RUBY_DATA_FUNC | dfree
| ) |  |

Definition at line 2376 of file gc.c.

References Check_Type, klass, and T_CLASS.

Referenced by RUBY_ALIAS_FUNCTION().

## ◆ rb_data_typed_object_wrap()

VALUE rb_data_typed_object_wrap | ( | VALUE | klass,
|  | void * | datap,
|  | const rb_data_type_t * | type
| ) |  |

Definition at line 2397 of file gc.c.

References Check_Type, klass, and T_CLASS.

Referenced by RUBY_ALIAS_FUNCTION().

## ◆ rb_define_finalizer()

VALUE rb_define_finalizer | ( | VALUE | obj,
|  | VALUE | block
| ) |  |

Definition at line 3287 of file gc.c.

## ◆ rb_during_gc()

int rb_during_gc | ( | void |  | ) |

Definition at line 8687 of file gc.c.

References during_gc, and rb_objspace.

Referenced by rb_ec_stack_overflow().

## ◆ rb_ec_stack_check()

MJIT_FUNC_EXPORTED int rb_ec_stack_check | ( | rb_execution_context_t * | ec | ) |

Definition at line 4665 of file gc.c.

## ◆ rb_free_const_table()

void rb_free_const_table | ( | struct rb_id_table * | tbl | ) |

Definition at line 2491 of file gc.c.

References rb_id_table_foreach_values().

## ◆ rb_gc()

void rb_gc | ( | void |  | ) |

Definition at line 8679 of file gc.c.

References GPR_DEFAULT_REASON, and rb_objspace.

Referenced by rb_fdopen(), rb_gc_for_fd(), rb_gc_start(), and rb_reg_region_copy().

## ◆ rb_gc_adjust_memory_usage()

void rb_gc_adjust_memory_usage | ( | ssize_t | diff | ) |

Definition at line 10300 of file gc.c.

## ◆ rb_gc_copy_finalizer()

void rb_gc_copy_finalizer | ( | VALUE | dest,
|  | VALUE | obj
| ) |  |

Definition at line 3295 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_SET, FL_TEST, obj, rb_objspace, st_insert(), and st_lookup().

## ◆ rb_gc_count()

size_t rb_gc_count | ( | void |  | ) |

Definition at line 8711 of file gc.c.

References rb_objspace::count, and rb_objspace::profile.

## ◆ rb_gc_disable()

VALUE rb_gc_disable | ( | void |  | ) |

Definition at line 9235 of file gc.c.

References rb_objspace.

## ◆ rb_gc_disable_no_rest()

VALUE rb_gc_disable_no_rest | ( | void |  | ) |

Definition at line 9225 of file gc.c.

References dont_gc, old, Qfalse, Qtrue, rb_objspace, and TRUE.

## ◆ rb_gc_enable()

VALUE rb_gc_enable | ( | void |  | ) |

Definition at line 9209 of file gc.c.

References dont_gc, FALSE, old, Qfalse, Qtrue, and rb_objspace.

## ◆ rb_gc_force_recycle()

void rb_gc_force_recycle | ( | VALUE | obj | ) |

Definition at line 7011 of file gc.c.

References rb_objspace.

Referenced by rb_parser_free(), and rb_str_tmp_frozen_release().

## ◆ rb_gc_guarded_ptr_val()

volatile VALUE* rb_gc_guarded_ptr_val | ( | volatile VALUE * | ptr,
|  | VALUE | val
| ) |  |

Definition at line 250 of file gc.c.

References ptr, and rb_gc_guarded_val.

## ◆ rb_gc_latest_gc_info()

VALUE rb_gc_latest_gc_info | ( | VALUE | key | ) |

Definition at line 8816 of file gc.c.

References rb_objspace.

## ◆ rb_gc_location()

VALUE rb_gc_location | ( | VALUE | value | ) |

Definition at line 8111 of file gc.c.

References SPECIAL_CONST_P.

Referenced by rb_execution_context_update(), rb_fiber_update_self(), and rb_iseq_update_references().

## ◆ rb_gc_mark()

void rb_gc_mark | ( | VALUE | ptr | ) |

Definition at line 5212 of file gc.c.

Referenced by rb_ast_mark(), rb_hook_list_mark(), rb_iseq_mark_insn_storage(), rb_strterm_mark(), and rb_vm_mark().

## ◆ rb_gc_mark_locations()

void rb_gc_mark_locations | ( | const VALUE * | start,
|  | const VALUE * | end
| ) |  |

Definition at line 4699 of file gc.c.

## ◆ rb_gc_mark_machine_stack()

void rb_gc_mark_machine_stack | ( | const rb_execution_context_t * | ec | ) |

Definition at line 4981 of file gc.c.

References GET_STACK_BOUNDS, and rb_objspace.

## ◆ rb_gc_mark_maybe()

void rb_gc_mark_maybe | ( | VALUE | obj | ) |

Definition at line 5044 of file gc.c.

Referenced by rb_gvar_val_marker(), and rb_gvar_var_marker().

## ◆ rb_gc_mark_movable()

void rb_gc_mark_movable | ( | VALUE | ptr | ) |

Definition at line 5206 of file gc.c.

Referenced by rb_fiber_mark_self().

## ◆ rb_gc_mark_values()

void rb_gc_mark_values | ( | long | n,
|  | const VALUE * | values
| ) |  |

Definition at line 4715 of file gc.c.

References i, n, and rb_objspace.

Referenced by rb_vm_mark().

## ◆ rb_gc_mark_vm_stack_values()

void rb_gc_mark_vm_stack_values | ( | long | n,
|  | const VALUE * | values
| ) |  |

Definition at line 4739 of file gc.c.

References rb_objspace.

Referenced by rb_execution_context_mark().

## ◆ rb_gc_start()

VALUE rb_gc_start | ( | void |  | ) |

Definition at line 8672 of file gc.c.

References Qnil, and rb_gc().

## ◆ rb_gc_stat()

size_t rb_gc_stat | ( | VALUE | key | ) |

Definition at line 9174 of file gc.c.

References key, and SYMBOL_P.

## ◆ rb_gc_unprotect_logging()

void rb_gc_unprotect_logging | ( | void * | objptr,
|  | const char * | filename,
|  | int | line
| ) |  |

Definition at line 6909 of file gc.c.

References obj.

## ◆ rb_gc_update_tbl_refs()

void rb_gc_update_tbl_refs | ( | st_table * | ptr | ) |

Definition at line 7983 of file gc.c.

References rb_objspace.

Referenced by rb_vm_update_references().

## ◆ rb_gc_verify_internal_consistency()

void rb_gc_verify_internal_consistency | ( | void |  | ) |

Definition at line 6202 of file gc.c.

## ◆ rb_gc_writebarrier_remember()

MJIT_FUNC_EXPORTED void rb_gc_writebarrier_remember | ( | VALUE | obj | ) |

Definition at line 6875 of file gc.c.

References gc_report, and rb_objspace.

## ◆ rb_gcdebug_print_obj_condition()

void rb_gcdebug_print_obj_condition | ( | VALUE | obj | ) |

## ◆ rb_imemo_new()

VALUE rb_imemo_new | ( | enum imemo_type | type,
|  | VALUE | v1,
|  | VALUE | v2,
|  | VALUE | v3,
|  | VALUE | v0
| ) |  |

Definition at line 2306 of file gc.c.

References FL_USHIFT, RVALUE::flags, and T_IMEMO.

## ◆ rb_imemo_tmpbuf_parser_heap()

rb_imemo_tmpbuf_t* rb_imemo_tmpbuf_parser_heap | ( | void * | buf,
|  | rb_imemo_tmpbuf_t * | old_heap,
|  | size_t | cnt
| ) |  |

Definition at line 2326 of file gc.c.

## ◆ rb_iseq_free()

void rb_iseq_free | ( | const rb_iseq_t * | iseq | ) |

Definition at line 89 of file iseq.c.

References rb_iseq_constant_body::iseq_insn_info::body, rb_iseq_struct::body, rb_iseq_constant_body::call_data, rb_iseq_constant_body::catch_table, rb_kwarg_call_data::ci_kw, rb_iseq_constant_body::ci_kw_size, rb_iseq_constant_body::ci_size, i, rb_iseq_constant_body::insns_info, rb_iseq_constant_body::is_entries, iseq, rb_iseq_constant_body::iseq_encoded, rb_iseq_constant_body::keyword, rb_call_info_with_kwarg::kw_arg, LIKELY, rb_iseq_constant_body::local_table, mjit_free_iseq(), NULL, rb_iseq_constant_body::opt_table, rb_iseq_constant_body::param, rb_iseq_constant_body::iseq_insn_info::positions, rb_iseq_shared_exc_local_tbl, RUBY_FREE_ENTER, ruby_xfree(), and rb_iseq_constant_body::iseq_insn_info::succ_index_table.

## ◆ rb_iseq_mark()

void rb_iseq_mark | ( | const rb_iseq_t * | iseq | ) |

Definition at line 287 of file iseq.c.

References rb_iseq_struct::body, FL_TEST, iseq, ISEQ_MARKABLE_ISEQ, RUBY_MARK_ENTER, RUBY_MARK_UNLESS_NULL, and rb_iseq_struct::wrapper.

## ◆ rb_iseq_memsize()

size_t rb_iseq_memsize | ( | const rb_iseq_t * | iseq | ) |

Definition at line 373 of file iseq.c.

References rb_iseq_struct::body, rb_iseq_constant_body::call_data, rb_iseq_constant_body::catch_table, rb_iseq_constant_body::ci_size, rb_iseq_constant_body::insns_info, int, iseq, ISEQ_EXECUTABLE_P, rb_iseq_constant_body::iseq_size, rb_iseq_constant_body::local_table_size, size, rb_iseq_constant_body::iseq_insn_info::size, and unsigned.

## ◆ rb_iseq_update_references()

void rb_iseq_update_references | ( | rb_iseq_t * | iseq | ) |

Definition at line 221 of file iseq.c.

References rb_iseq_location_struct::base_label, rb_iseq_struct::body, rb_iseq_constant_body::coverage, FL_TEST, iseq, ISEQ_MARKABLE_ISEQ, rb_iseq_location_struct::label, rb_iseq_constant_body::local_iseq, rb_iseq_constant_body::location, rb_iseq_constant_body::parent_iseq, rb_iseq_location_struct::pathobj, rb_iseq_constant_body::pc2branchindex, rb_gc_location(), and rb_iseq_constant_body::variable.

## ◆ rb_malloc_info_show_results()

void rb_malloc_info_show_results | ( | void |  | ) |

Definition at line 9979 of file gc.c.

Referenced by ruby_default_signal().

## ◆ rb_mark_hash()

void rb_mark_hash | ( | st_table * | tbl | ) |

Definition at line 4862 of file gc.c.

## ◆ rb_mark_set()

void rb_mark_set | ( | st_table * | tbl | ) |

Definition at line 4798 of file gc.c.

Referenced by rb_iseq_build_from_ary().

## ◆ rb_mark_tbl()

void rb_mark_tbl | ( | st_table * | tbl | ) |

Definition at line 5005 of file gc.c.

Referenced by rb_vm_mark().

## ◆ rb_mark_tbl_no_pin()

void rb_mark_tbl_no_pin | ( | st_table * | tbl | ) |

Definition at line 5011 of file gc.c.

## ◆ rb_memerror()

void rb_memerror | ( | void |  | ) |

Definition at line 9578 of file gc.c.

References GET_EC, and rb_objspace_of.

## ◆ rb_memory_id()

VALUE rb_memory_id | ( | VALUE | obj | ) |

Definition at line 3737 of file gc.c.

## ◆ rb_method_type_name()

const char* rb_method_type_name | ( | rb_method_type_t | type | ) |

Definition at line 11378 of file gc.c.

References rb_bug(), VM_METHOD_TYPE_ALIAS, VM_METHOD_TYPE_ATTRSET, VM_METHOD_TYPE_BMETHOD, VM_METHOD_TYPE_CFUNC, VM_METHOD_TYPE_ISEQ, VM_METHOD_TYPE_IVAR, VM_METHOD_TYPE_MISSING, VM_METHOD_TYPE_NOTIMPLEMENTED, VM_METHOD_TYPE_OPTIMIZED, VM_METHOD_TYPE_REFINED, VM_METHOD_TYPE_UNDEF, and VM_METHOD_TYPE_ZSUPER.

## ◆ rb_newobj()

VALUE rb_newobj | ( | void |  | ) |

Definition at line 2288 of file gc.c.

## ◆ rb_newobj_of()

VALUE rb_newobj_of | ( | VALUE | klass,
|  | VALUE | flags
| ) |  |

Definition at line 2294 of file gc.c.

## ◆ rb_obj_gc_flags()

size_t rb_obj_gc_flags | ( | VALUE | obj,
|  | ID * | flags,
|  | size_t | max
| ) |  |

Definition at line 6976 of file gc.c.

## ◆ rb_obj_id()

VALUE rb_obj_id | ( | VALUE | obj | ) |

Definition at line 3770 of file gc.c.

## ◆ rb_obj_info()

const MJIT_FUNC_EXPORTED char* rb_obj_info | ( | VALUE | obj | ) |

Definition at line 11655 of file gc.c.

## ◆ rb_obj_info_dump()

void rb_obj_info_dump | ( | VALUE | obj | ) |

Definition at line 11661 of file gc.c.

References fprintf(), obj, rb_raw_obj_info(), and stderr.

## ◆ rb_obj_info_dump_loc()

void rb_obj_info_dump_loc | ( | VALUE | obj,
|  | const char * | file,
|  | int | line,
|  | const char * | func
| ) |  |

Definition at line 11668 of file gc.c.

References fprintf(), obj, rb_raw_obj_info(), and stderr.

## ◆ rb_obj_memsize_of()

size_t rb_obj_memsize_of | ( | VALUE | obj | ) |

Definition at line 3934 of file gc.c.

## ◆ rb_obj_rgengc_promoted_p()

VALUE rb_obj_rgengc_promoted_p | ( | VALUE | obj | ) |

Definition at line 6970 of file gc.c.

References obj, OBJ_PROMOTED, Qfalse, and Qtrue.

## ◆ rb_obj_rgengc_writebarrier_protected_p()

VALUE rb_obj_rgengc_writebarrier_protected_p | ( | VALUE | obj | ) |

Definition at line 6960 of file gc.c.

## ◆ rb_objspace_alloc()

rb_objspace_t* rb_objspace_alloc | ( | void |  | ) |

Definition at line 1586 of file gc.c.

## ◆ rb_objspace_call_finalizer()

void rb_objspace_call_finalizer | ( | rb_objspace_t * | objspace | ) |

Definition at line 3441 of file gc.c.

References i.

## ◆ rb_objspace_data_type_memsize()

size_t rb_objspace_data_type_memsize | ( | VALUE | obj | ) |

Definition at line 2417 of file gc.c.

References obj, ptr, RTYPEDDATA_DATA, RTYPEDDATA_P, and RTYPEDDATA_TYPE.

## ◆ rb_objspace_data_type_name()

const char* rb_objspace_data_type_name | ( | VALUE | obj | ) |

Definition at line 2430 of file gc.c.

References obj, RTYPEDDATA_P, and RTYPEDDATA_TYPE.

## ◆ rb_objspace_each_objects()

void rb_objspace_each_objects | ( | each_obj_callback * | callback,
|  | void * | data
| ) |  |

Definition at line 3025 of file gc.c.

Referenced by rb_iseq_remove_coverage_all(), and rb_iseq_trace_set_all().

## ◆ rb_objspace_each_objects_without_setup()

void rb_objspace_each_objects_without_setup | ( | each_obj_callback * | callback,
|  | void * | data
| ) |  |

Definition at line 3048 of file gc.c.

## ◆ rb_objspace_free()

void rb_objspace_free | ( | rb_objspace_t * | objspace | ) |

Definition at line 1600 of file gc.c.

References free, global_list, heap_allocated_pages, heap_eden, heap_pages_sorted, i, is_lazy_sweeping, list, gc_list::next, rb_objspace::profile, rb_bug(), rb_objspace::records, and xfree.

## ◆ rb_objspace_garbage_object_p()

int rb_objspace_garbage_object_p | ( | VALUE | obj | ) |

Definition at line 3605 of file gc.c.

References rb_objspace.

## ◆ rb_objspace_internal_object_p()

int rb_objspace_internal_object_p | ( | VALUE | obj | ) |

Definition at line 3095 of file gc.c.

## ◆ rb_objspace_markable_object_p()

int rb_objspace_markable_object_p | ( | VALUE | obj | ) |

Definition at line 3598 of file gc.c.

References rb_objspace.

## ◆ rb_objspace_marked_object_p()

int rb_objspace_marked_object_p | ( | VALUE | obj | ) |

Definition at line 5222 of file gc.c.

## ◆ rb_objspace_reachable_objects_from()

void rb_objspace_reachable_objects_from | ( | VALUE | obj,
|  | void(func)(VALUE, void *) | ,
|  | void * | data
| ) |  |

Definition at line 9448 of file gc.c.

References rb_objspace.

## ◆ rb_objspace_reachable_objects_from_root()

void rb_objspace_reachable_objects_from_root | ( | void(func)(const char *category, VALUE, void *) | ,
|  | void * | passing_data
| ) |  |

Definition at line 9476 of file gc.c.

References rb_objspace.

## ◆ rb_objspace_set_event_hook()

void rb_objspace_set_event_hook | ( | const rb_event_flag_t | event | ) |

Definition at line 2080 of file gc.c.

References rb_objspace::flags, rb_objspace::has_hook, rb_objspace::hook_events, rb_objspace, and RUBY_INTERNAL_EVENT_OBJSPACE_MASK.

## ◆ rb_raw_obj_info()

const char* rb_raw_obj_info | ( | char * | buff,
|  | const int | buff_size,
|  | VALUE | obj
| ) |  |

Definition at line 11419 of file gc.c.

References APPENDF, BUFF_ARGS, obj, and SPECIAL_CONST_P.

Referenced by rb_obj_info_dump(), rb_obj_info_dump_loc(), and ruby_debug_print_value().

## ◆ rb_size_mul_add_or_raise()

size_t rb_size_mul_add_or_raise | ( | size_t | x,
|  | size_t | y,
|  | size_t | z,
|  | VALUE | exc
| ) |  |

Definition at line 219 of file gc.c.

## ◆ rb_size_mul_or_raise()

size_t rb_size_mul_or_raise | ( | size_t | x,
|  | size_t | y,
|  | VALUE | exc
| ) |  |

Definition at line 192 of file gc.c.

## ◆ rb_undefine_finalizer()

VALUE rb_undefine_finalizer | ( | VALUE | obj | ) |

Definition at line 3191 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_UNSET, obj, rb_check_frozen, rb_objspace, and st_delete().

## ◆ rb_vm_update_references()

void rb_vm_update_references | ( | void * | ptr | ) |

Definition at line 2234 of file vm.c.

References rb_vm_struct::frozen_strings, ptr, and rb_gc_update_tbl_refs().

## ◆ rb_wb_protected_newobj_of()

VALUE rb_wb_protected_newobj_of | ( | VALUE | klass,
|  | VALUE | flags
| ) |  |

Definition at line 2279 of file gc.c.

References FL_WB_PROTECTED, RVALUE::flags, and GC_ASSERT.

## ◆ rb_wb_unprotected_newobj_of()

VALUE rb_wb_unprotected_newobj_of | ( | VALUE | klass,
|  | VALUE | flags
| ) |  |

Definition at line 2272 of file gc.c.

References FL_WB_PROTECTED, RVALUE::flags, and GC_ASSERT.

## ◆ rb_xcalloc_mul_add_mul()

void* rb_xcalloc_mul_add_mul | ( | size_t | x,
|  | size_t | y,
|  | size_t | z,
|  | size_t | w
| ) |  |

Definition at line 10177 of file gc.c.

## ◆ rb_xmalloc_mul_add()

void* rb_xmalloc_mul_add | ( | size_t | x,
|  | size_t | y,
|  | size_t | z
| ) |  |

Definition at line 10156 of file gc.c.

## ◆ rb_xmalloc_mul_add_mul()

void* rb_xmalloc_mul_add_mul | ( | size_t | x,
|  | size_t | y,
|  | size_t | z,
|  | size_t | w
| ) |  |

Definition at line 10170 of file gc.c.

## ◆ rb_xrealloc_mul_add()

void* rb_xrealloc_mul_add | ( | const void * | p,
|  | size_t | x,
|  | size_t | y,
|  | size_t | z
| ) |  |

Definition at line 10163 of file gc.c.

## ◆ RUBY_ALIAS_FUNCTION() [1/2]

RUBY_ALIAS_FUNCTION | ( | rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree) | ,
|  | rb_data_object_wrap | ,
|  | (klass, datap, dmark, dfree) |
| ) |  |

Definition at line 2383 of file gc.c.

References DATA_PTR, klass, obj, rb_data_object_wrap(), size, and xcalloc.

## ◆ RUBY_ALIAS_FUNCTION() [2/2]

RUBY_ALIAS_FUNCTION | ( | rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type) | ,
|  | rb_data_typed_object_wrap | ,
|  | (klass, datap, type) |
| ) |  |

Definition at line 2404 of file gc.c.

References DATA_PTR, klass, obj, rb_data_typed_object_wrap(), size, and xcalloc.

## ◆ ruby_gc_set_params()

void ruby_gc_set_params | ( | void |  | ) |

Definition at line 9401 of file gc.c.

## ◆ ruby_get_stack_grow_direction()

int ruby_get_stack_grow_direction | ( | volatile VALUE * | addr | ) |

Definition at line 4620 of file gc.c.

References ruby_stack_grow_direction, and SET_MACHINE_STACK_END.

## ◆ ruby_malloc_size_overflow()

void ruby_malloc_size_overflow | ( | size_t | count,
|  | size_t | elsize
| ) |  |

Definition at line 10074 of file gc.c.

References count, PRIuSIZE, rb_eArgError, and rb_raise().

## ◆ ruby_mimfree()

void ruby_mimfree | ( | void * | ptr | ) |

Definition at line 10217 of file gc.c.

References free, and ptr.

## ◆ ruby_mimmalloc()

void* ruby_mimmalloc | ( | size_t | size | ) |

Definition at line 10187 of file gc.c.

References malloc(), NULL, size, and malloc_obj_info::size.

Referenced by Init_BareVM(), and rb_threadptr_root_fiber_setup().

## ◆ ruby_sized_xfree()

void ruby_sized_xfree | ( | void * | x,
|  | size_t | size
| ) |  |

Definition at line 10142 of file gc.c.

Referenced by ruby_xfree().

## ◆ ruby_sized_xrealloc()

void* ruby_sized_xrealloc | ( | void * | ptr,
|  | size_t | new_size,
|  | size_t | old_size
| ) |  |

Definition at line 10107 of file gc.c.

Referenced by ruby_xrealloc_body().

## ◆ ruby_sized_xrealloc2()

void* ruby_sized_xrealloc2 | ( | void * | ptr,
|  | size_t | n,
|  | size_t | size,
|  | size_t | old_n
| ) |  |

Definition at line 10126 of file gc.c.

References len.

Referenced by ruby_xrealloc2_body().

## ◆ ruby_xcalloc()

void* ruby_xcalloc | ( | size_t | n,
|  | size_t | size
| ) |  |

Definition at line 11970 of file gc.c.

References n, ruby_xcalloc_body(), and size.

Referenced by rb_iseq_defined_string().

## ◆ ruby_xcalloc_body()

void* ruby_xcalloc_body | ( | size_t | n,
|  | size_t | size
| ) |  |

Definition at line 10098 of file gc.c.

Referenced by ruby_xcalloc().

## ◆ ruby_xfree()

void ruby_xfree | ( | void * | x | ) |

Definition at line 10150 of file gc.c.

References ruby_sized_xfree().

Referenced by freeifaddrs(), Init_fiddle(), rb_fiddle_free(), rb_free_tmp_buffer(), rb_iseq_free(), and rb_iseq_insns_info_encode_positions().

## ◆ ruby_xmalloc()

void* ruby_xmalloc | ( | size_t | size | ) |

Definition at line 11950 of file gc.c.

References ruby_xmalloc_body(), and size.

## ◆ ruby_xmalloc2()

void* ruby_xmalloc2 | ( | size_t | n,
|  | size_t | size
| ) |  |

Definition at line 11960 of file gc.c.

References n, ruby_xmalloc2_body(), and size.

## ◆ ruby_xmalloc2_body()

void* ruby_xmalloc2_body | ( | size_t | n,
|  | size_t | size
| ) |  |

Definition at line 10082 of file gc.c.

Referenced by ruby_xmalloc2().

## ◆ ruby_xmalloc_body()

void* ruby_xmalloc_body | ( | size_t | size | ) |

Definition at line 10065 of file gc.c.

References size.

Referenced by ruby_xmalloc().

## ◆ ruby_xrealloc()

void* ruby_xrealloc | ( | void * | ptr,
|  | size_t | new_size
| ) |  |

Definition at line 11980 of file gc.c.

References ptr, and ruby_xrealloc_body().

## ◆ ruby_xrealloc2()

void* ruby_xrealloc2 | ( | void * | ptr,
|  | size_t | n,
|  | size_t | new_size
| ) |  |

Definition at line 11990 of file gc.c.

References n, ptr, and ruby_xrealloc2_body().

## ◆ ruby_xrealloc2_body()

void* ruby_xrealloc2_body | ( | void * | ptr,
|  | size_t | n,
|  | size_t | size
| ) |  |

Definition at line 10133 of file gc.c.

References n, ptr, ruby_sized_xrealloc2(), and size.

Referenced by ruby_xrealloc2().

## ◆ ruby_xrealloc_body()

void* ruby_xrealloc_body | ( | void * | ptr,
|  | size_t | new_size
| ) |  |

Definition at line 10117 of file gc.c.

References ptr, and ruby_sized_xrealloc().

Referenced by ruby_xrealloc().

## Variable Documentation

## ◆ rb_gc_guarded_val

volatile VALUE rb_gc_guarded_val

Definition at line 248 of file gc.c.

Referenced by rb_gc_guarded_ptr_val().

## ◆ rb_hashtype_ident

const struct st_hash_type rb_hashtype_ident

Definition at line 322 of file hash.c.

## ◆ rb_mGC

VALUE rb_mGC

Definition at line 1000 of file gc.c.

Referenced by Init_GC().

## ◆ ruby_disable_gc

int ruby_disable_gc = 0

Definition at line 1001 of file gc.c.

## ◆ ruby_global_symbols

rb_symbols_t ruby_global_symbols

Definition at line 66 of file symbol.c.

## ◆ ruby_initial_gc_stress_ptr

VALUE* ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress

Definition at line 905 of file gc.c.

Referenced by ruby_env_debug_option().

## ◆ ruby_rgengc_debug

int ruby_rgengc_debug

Definition at line 388 of file gc.c.

Referenced by ruby_env_debug_option().

## ◆ ruby_stack_grow_direction

int ruby_stack_grow_direction

Definition at line 4618 of file gc.c.

Referenced by ruby_get_stack_grow_direction().

UNLIKELY
#define UNLIKELY(x)
Definition: ffi_common.h:126
STACK_END
#define STACK_END
Definition: gc.c:4601
GPR_FLAG_IMMEDIATE_MARK
@ GPR_FLAG_IMMEDIATE_MARK
Definition: gc.c:513
PRIxVALUE
#define PRIxVALUE
Definition: ruby.h:164
VALUE
unsigned long VALUE
Definition: ruby.h:102
GET_EC
#define GET_EC()
Definition: vm_core.h:1766
STACK_START
#define STACK_START
Definition: gc.c:4600
SPECIAL_CONST_P
#define SPECIAL_CONST_P(x)
Definition: ruby.h:1313
FL_TEST
#define FL_TEST(x, f)
Definition: ruby.h:1353
v
int VALUE v
Definition: rb_mjit_min_header-2.7.0.h:12332
obj
const VALUE VALUE obj
Definition: rb_mjit_min_header-2.7.0.h:5742
ELTS_SHARED
#define ELTS_SHARED
Definition: ruby.h:970
GPR_FLAG_IMMEDIATE_SWEEP
@ GPR_FLAG_IMMEDIATE_SWEEP
Definition: gc.c:511
GPR_FLAG_FULL_MARK
@ GPR_FLAG_FULL_MARK
Definition: gc.c:514
GPR_FLAG_MALLOC
@ GPR_FLAG_MALLOC
Definition: gc.c:505
RARRAY_EMBED_FLAG
@ RARRAY_EMBED_FLAG
Definition: ruby.h:1029
key
key
Definition: openssl_missing.h:181
rb_bug
void rb_bug(const char *fmt,...)
Definition: error.c:634
GC_ASSERT
#define GC_ASSERT(expr)
Definition: gc.c:403
RGENGC_CHECK_MODE
#define RGENGC_CHECK_MODE
Definition: gc.c:399
BUILTIN_TYPE
#define BUILTIN_TYPE(x)
Definition: ruby.h:551
RMOVED
#define RMOVED(obj)
Definition: ruby.h:1266
RBASIC
#define RBASIC(obj)
Definition: ruby.h:1267
gc_event_hook_needed_p
#define gc_event_hook_needed_p(objspace, event)
Definition: gc.c:2100
SIZET2NUM
#define SIZET2NUM(v)
Definition: ruby.h:295
Qnil
#define Qnil
Definition: ruby.h:469
name
const char * name
Definition: nkf.c:208