source: EcnlProtoTool/trunk/mruby-1.2.0/include/mruby/gc.h@ 321

Last change on this file since 321 was 321, checked in by coas-nagasima, 7 years ago

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 1.9 KB
Line 
1/*
2** mruby/gc.h - garbage collector for mruby
3**
4** See Copyright Notice in mruby.h
5*/
6
7#ifndef MRUBY_GC_H
8#define MRUBY_GC_H
9
10#include "mruby/common.h"
11
12/**
13 * Uncommon memory management stuffs.
14 */
15MRB_BEGIN_DECL
16
17
18struct mrb_state;
19
20typedef void (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
21void mrb_objspace_each_objects(struct mrb_state *mrb, mrb_each_object_callback *callback, void *data);
22MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c);
23
24#ifndef MRB_GC_ARENA_SIZE
25#define MRB_GC_ARENA_SIZE 100
26#endif
27
28typedef enum {
29 MRB_GC_STATE_ROOT = 0,
30 MRB_GC_STATE_MARK,
31 MRB_GC_STATE_SWEEP
32} mrb_gc_state;
33
34typedef struct mrb_heap_page {
35 struct RBasic *freelist;
36 struct mrb_heap_page *prev;
37 struct mrb_heap_page *next;
38 struct mrb_heap_page *free_next;
39 struct mrb_heap_page *free_prev;
40 mrb_bool old:1;
41 void *objects[];
42} mrb_heap_page;
43
44typedef struct mrb_gc {
45 mrb_heap_page *heaps; /* heaps for GC */
46 mrb_heap_page *sweeps;
47 mrb_heap_page *free_heaps;
48 size_t live; /* count of live objects */
49#ifdef MRB_GC_FIXED_ARENA
50 struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */
51#else
52 struct RBasic **arena; /* GC protection array */
53 int arena_capa;
54#endif
55 int arena_idx;
56
57 mrb_gc_state state; /* state of gc */
58 int current_white_part; /* make white object by white_part */
59 struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */
60 struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */
61 size_t live_after_mark;
62 size_t threshold;
63 int interval_ratio;
64 int step_ratio;
65 mrb_bool disabled :1;
66 mrb_bool full :1;
67 mrb_bool generational :1;
68 mrb_bool out_of_memory :1;
69 size_t majorgc_old_threshold;
70} mrb_gc;
71
72MRB_API mrb_bool
73mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
74
75MRB_END_DECL
76
77#endif /* MRUBY_GC_H */
Note: See TracBrowser for help on using the repository browser.