覺得需要更明確地瞭解 stack 的內容。回到 rb_main
,這裡是 stack 第一次出現的地方
static int
rb_main(int argc, char **argv)
{
RUBY_INIT_STACK;
ruby_init();
return ruby_run_node(ruby_options(argc, argv));
}
/**
* A convenience macro to call ruby_init_stack().
* Must be placed just after variable declarations.
*/
#define RUBY_INIT_STACK \
VALUE variable_in_this_stack_frame; \
ruby_init_stack(&variable_in_this_stack_frame);
/** @} */
先看 ruby_init_stack
:
從呼叫 pthread_self()
推測這裡跟 multi-thread 有關,不只 rb_main 會用到
function 內有很多 #ifdef
邏輯,可以看 config.h
設定 native_main_thread
的內容
static struct {
rb_nativethread_id_t id;
size_t stack_maxsize;
VALUE *stack_start;
} native_main_thread;
覺得開始有點複雜,我想先弄清楚 stack 的結構,但是在 init 或 setup 相關的 function 中,有些邏輯判斷看起來跟 EC, VM
和 multi-thread 有關。rb_vm_struct
裡面的資訊很多,先抓出它有 objspace