2010-07-06 97 views
1

在1.9新對象結構中嵌入一些高德成對象爲快速訪問:在Ruby 1.9中嵌入實例變量?

#define ROBJECT_EMBED_LEN_MAX 3 
struct RObject { 
    struct RBasic basic; 
    union { 
     struct { 
      long numiv; 
      VALUE *ivptr; 
      struct st_table *iv_index_tbl; 
     } heap; 
     VALUE ary[ROBJECT_EMBED_LEN_MAX]; 
    } as; 
}; 

我的問題是,在第一3個高德始終嵌入?或者只有在ivars的數量是< = 3時才嵌入?

我試過閱讀源代碼,但發現旁邊難以理解。

由於

回答

1

實例變量的堆(稱爲heap)和嵌入的實例變量(稱爲ary)被包含在一個聯合。您還可以找到你引述的這段下面定義的一些宏,看起來都像:

#define ROBJECT_IVPTR(o) \ 
    ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ 
    ROBJECT(o)->as.ary : \ 
    ROBJECT(o)->as.heap.ivptr) 

主要在所有這些是RBASIC(o)->flags & ROBJECT_EMBEDROBJECT_EMBED標誌指示嵌入的實例變量是否正在使用,或堆正在使用中。

因此嵌入式變量僅在實例變量的數量爲<= 3時使用。

+0

這是我懷疑,但我需要確認!非常感謝! – horseyguy 2010-07-07 13:14:37