source: EcnlProtoTool/trunk/mruby-1.3.0/include/mruby/gc.h@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 2.0 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 "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
36typedef struct mrb_heap_page {
37 struct RBasic *freelist;
38 struct mrb_heap_page *prev;
39 struct mrb_heap_page *next;
40 struct mrb_heap_page *free_next;
41 struct mrb_heap_page *free_prev;
42 mrb_bool old:1;
43 void *objects[];
44} mrb_heap_page;
45
46typedef struct mrb_gc {
47 mrb_heap_page *heaps; /* heaps for GC */
48 mrb_heap_page *sweeps;
49 mrb_heap_page *free_heaps;
50 size_t live; /* count of live objects */
51#ifdef MRB_GC_FIXED_ARENA
52 struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */
53#else
54 struct RBasic **arena; /* GC protection array */
55 int arena_capa;
56#endif
57 int arena_idx;
58
59 mrb_gc_state state; /* state of gc */
60 int current_white_part; /* make white object by white_part */
61 struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */
62 struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */
63 size_t live_after_mark;
64 size_t threshold;
65 int interval_ratio;
66 int step_ratio;
67 mrb_bool iterating :1;
68 mrb_bool disabled :1;
69 mrb_bool full :1;
70 mrb_bool generational :1;
71 mrb_bool out_of_memory :1;
72 size_t majorgc_old_threshold;
73} mrb_gc;
74
75MRB_API mrb_bool
76mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
77
78MRB_END_DECL
79
80#endif /* MRUBY_GC_H */
Note: See TracBrowser for help on using the repository browser.