iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

C again系列 第 10

YARV stack 上放的資料 (1)

  • 分享至 

  • xImage
  •  

覺得需要更明確地瞭解 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

  1. 從呼叫 pthread_self() 推測這裡跟 multi-thread 有關,不只 rb_main 會用到

  2. function 內有很多 #ifdef 邏輯,可以看 config.h

  3. 設定 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


上一篇
iseq & VALUE & rb_iseq_struct
下一篇
YARV stack 上放的資料 (2) - 每個 thread 有自己的 stack
系列文
C again30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言