2010-07-06 4 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라고 함) 노동 조합에 포함되어 있습니다. 당신은 모든 모양을 당신이 인용 SNIPPIT 아래에 정의 된 몇 가지 매크로를 찾을 수 있습니다 : 모든이의

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

RBASIC(o)->flags & ROBJECT_EMBED입니다. ROBJECT_EMBED 플래그는 포함 된 인스턴스 변수가 사용 중인지 또는 힙이 사용 중인지 여부를 나타냅니다.

그래서 임베디드 변수는 인스턴스 변수의 수가 <= 3 일 때만 사용됩니다.

+0

이것은 내가 의심하는 것이지만 확인이 필요했습니다! 고마워요! – horseyguy

관련 문제