<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Ruby變量在c ruby中的存儲

    Posted on 2007-09-20 16:17 dennis 閱讀(661) 評論(0)  編輯  收藏 所屬分類: 動態語言my open-source源碼解讀linux & C
        讀完ruby hacking guide第6章,徹底總結下:
    1.在Ruby中,類也是一個對象,因此有實例變量。類的實例變量、類變量、常量都是存儲在RClass struct的iv_tbl中,
    struct RClass {
        struct RBasic basic;
        struct st_table *iv_tbl;
        struct st_table *m_tbl;
        VALUE super;
    };
    iv_tbl的類型是st_table,我在這里用java實現了一下。

    2.用戶自定義類的對象(ruby層次聲明的類的對象)的實例變量存儲在RObject struct的iv_tbl中,
    struct RObject {
      struct RBasic basic;
      struct st_table *iv_tbl;
     };
    調用方法,本質上是一個查表操作。buildin的幾個類,比如String、Array、Hash等(在c層次上實現的類),它們的結構并沒有iv_table,這是從節省內存空間的角度考慮,它們的實例變量存儲在一張全局的st_table中。這張表比較特別,其中的每一個對應的值又是一個st_table,也就是一個“二元結構”,第一層結構是類名與實例變量表的映射,第二層才是實例變量名與實際值的映射。

    3.全局變量存儲在一張全局的st_table中,這個表的鍵就是變量名ID,由于全局變量允許通過alias來設置別名,因此這張全局表中真正存儲的是下面這個struct

    334 struct global_entry {
    335 struct global_variable *var;
    336 ID id;
    337 };

    324 struct global_variable {
    325 int counter; /* 引用計數 */
    326 void *data; /* 變量值 */
    327 VALUE (*getter)(); /* 取值函數 */
    328 void (*setter)(); /* 設置函數 */
    329 void (*marker)(); /* 標記函數 */
    330 int block_trace;
    331 struct trace_var *trace;
    332 };
    (variable.c)

    當不同變量名(通過別名聲明)指向的是同一個全局變量,其實它們指向的是同一個struct global_variable。


    主站蜘蛛池模板: 国产亚洲精品免费| 国产亚洲福利一区二区免费看| 成全视频高清免费观看电视剧| 久久久久国产亚洲AV麻豆 | 色吊丝性永久免费看码| 国产一区二区三区免费视频| 国产精品亚洲av色欲三区| 日本人护士免费xxxx视频| 免费国产在线精品一区| 久久精品亚洲男人的天堂| 国产激情免费视频在线观看| 亚洲人成电影在线天堂| 免费福利在线播放| 99久久婷婷国产综合亚洲| 国产美女a做受大片免费| 人妻无码中文字幕免费视频蜜桃| 亚洲乱码国产一区网址| 青柠影视在线观看免费| 亚洲综合国产精品| 成年性羞羞视频免费观看无限| 在线观看亚洲精品专区| 亚洲综合无码精品一区二区三区| 久别的草原电视剧免费观看| 67194在线午夜亚洲| 国产成人免费网站在线观看| 久久久受www免费人成| 亚洲精品欧洲精品| 麻豆成人精品国产免费| 伊人久久大香线蕉免费视频| 亚洲日本香蕉视频| 亚洲成网777777国产精品| 久99久精品免费视频热77| 亚洲色中文字幕在线播放| 亚洲人成国产精品无码| 亚州免费一级毛片| 成年大片免费视频播放一级| 亚洲黄色在线观看视频| 亚洲国产精品成人久久蜜臀| 中文字幕成人免费视频| 午夜成人无码福利免费视频| 色婷婷亚洲十月十月色天|