<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。


    主站蜘蛛池模板: 亚洲а∨精品天堂在线| 亚洲一区二区三区在线网站| 免费国产污网站在线观看不要卡| 成年女人午夜毛片免费看| 亚洲91精品麻豆国产系列在线| 亚洲精品免费视频| 亚洲高清中文字幕| 9久9久女女免费精品视频在线观看| 亚洲最大黄色网址| 中国在线观看免费高清完整版| 亚洲中文无码永久免费| 日本不卡在线观看免费v| 香港一级毛片免费看| 亚洲另类少妇17p| 一个人免费视频在线观看www | 91久久青青草原线免费| 亚洲日本在线观看| 免费A级毛片无码A∨免费| 亚洲人成激情在线播放| 成人免费视频国产| a一级毛片免费高清在线| 久久夜色精品国产嚕嚕亚洲av| 国产h肉在线视频免费观看| 亚洲一区二区无码偷拍| 亚洲国产精品丝袜在线观看| 国产在线观a免费观看| 亚洲精彩视频在线观看| 国产精品无码一区二区三区免费| 一区免费在线观看| 亚洲视频在线一区| 日韩一区二区免费视频| 中文字幕免费在线看电影大全 | 免费无码又爽又刺激高潮的视频| jzzijzzij在线观看亚洲熟妇| 久久久久久A亚洲欧洲AV冫| 曰批视频免费40分钟试看天天 | 处破女第一次亚洲18分钟| 国产成人亚洲综合色影视| 成人免费a级毛片| 国产一区二区三区免费观在线| 亚洲1区1区3区4区产品乱码芒果 |