source: EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/gc.h@ 439

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

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 2.2 KB
Line 
1/**
2** @file 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 "common.h"
11
12/**
13 * Uncommon memory management stuffs.
14 */
15MRB_BEGIN_DECL
16
17
18struct mrb_state;
19
20#define MRB_EACH_OBJ_OK 0
21#define MRB_EACH_OBJ_BREAK 1
22typedef int (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
23void mrb_objspace_each_objects(struct mrb_state *mrb, mrb_each_object_callback *callback, void *data);
24MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c);
25
26#ifndef MRB_GC_ARENA_SIZE
27#define MRB_GC_ARENA_SIZE 100
28#endif
29
30typedef enum {
31 MRB_GC_STATE_ROOT = 0,
32 MRB_GC_STATE_MARK,
33 MRB_GC_STATE_SWEEP
34} mrb_gc_state;
35
36/* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
37 * in struct/union" when in C++ mode */
38#ifdef _MSC_VER
39#pragma warning(push)
40#pragma warning(disable : 4200)
41#endif
42
43typedef struct mrb_heap_page {
44 struct RBasic *freelist;
45 struct mrb_heap_page *prev;
46 struct mrb_heap_page *next;
47 struct mrb_heap_page *free_next;
48 struct mrb_heap_page *free_prev;
49 mrb_bool old:1;
50 void *objects[];
51} mrb_heap_page;
52
53#ifdef _MSC_VER
54#pragma warning(pop)
55#endif
56
57typedef struct mrb_gc {
58 mrb_heap_page *heaps; /* heaps for GC */
59 mrb_heap_page *sweeps;
60 mrb_heap_page *free_heaps;
61 size_t live; /* count of live objects */
62#ifdef MRB_GC_FIXED_ARENA
63 struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */
64#else
65 struct RBasic **arena; /* GC protection array */
66 int arena_capa;
67#endif
68 int arena_idx;
69
70 mrb_gc_state state; /* state of gc */
71 int current_white_part; /* make white object by white_part */
72 struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */
73 struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */
74 size_t live_after_mark;
75 size_t threshold;
76 int interval_ratio;
77 int step_ratio;
78 mrb_bool iterating :1;
79 mrb_bool disabled :1;
80 mrb_bool full :1;
81 mrb_bool generational :1;
82 mrb_bool out_of_memory :1;
83 size_t majorgc_old_threshold;
84} mrb_gc;
85
86MRB_API mrb_bool
87mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
88
89MRB_END_DECL
90
91#endif /* MRUBY_GC_H */
Note: See TracBrowser for help on using the repository browser.