Куча переменных экземпляра (называемая heap
) и встроенные переменные экземпляра (называемые ary
) содержатся в объединении.Вы также найдете несколько макросов, определенных под приведенным вами фрагментом кода, которые выглядят следующим образом:
#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
.