2010-07-06 8 views
1

la nouvelle structure de l'objet en 1.9 embarque quelques Ivars en objets pour un accès plus rapide:Variables d'instance incorporées dans 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; 
}; 

Ma question est sont les premiers 3 Ivars toujours noyé? ou sont-ils seulement intégrés si le nombre d'ivars est < = 3?

J'ai essayé de lire la source, mais je la trouve incompréhensible.

Merci

Répondre

1

L'instance tas variable (appelée heap) et les variables d'instance embarqués (appelée ary) sont contenus dans un syndicat. Vous trouverez également des macros définies ci-dessous la snippit vous avez cité que tous ressemblent:

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

clé dans tous ces est RBASIC(o)->flags & ROBJECT_EMBED. L'indicateur ROBJECT_EMBED indique si des variables d'instance incorporées sont en cours d'utilisation ou si le segment de mémoire est en cours d'utilisation. Les variables incorporées ne sont donc utilisées que lorsque le nombre de variables d'instance est <= 3.

+0

c'est ce que je soupçonnais mais j'avais besoin de confirmation! Merci beaucoup! – horseyguy

Questions connexes