2010-07-06 63 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