26. ruby のメモリ利用
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
woman = Person.new("hanako", 31)
メモ
リ
空き
→
実
行
前
27. ruby のメモリ利用
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
woman = Person.new("hanako", 31)
メモ
リ
RClass(Person) 空き
こ
こ
ま
で
解
釈
→
28. ruby のメモリ利用
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
woman = Person.new("hanako", 31)
メモ
リ
RClass(Person) RObject(man) "taro" 4 空き
こ
こ
ま
で
解
釈
→
29. ruby のメモリ利用
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
woman = Person.new("hanako", 31)
こ
こ
ま
で
解
釈
→
メモ
リ
RClass(Person) RObject(man) "taro" 4 RObject(woman) "hanako" 31 空き
30. ruby のメモリ利用
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
woman = Person.new("hanako", 31)
こ
こ
ま
で
解
釈
→
object_id
メモ
リ
RClass(Person) RObject(man) "taro" 4 RObject(woman) "hanako" 31 空き
31. ruby は RClass や RObject
をメモリ上に作る
- class 定義時
- new した時
- リテラルを書いた時
33. struct RObject {
struct RBasic basic;
union {
struct {
long numiv;
VALUE *ivptr;
void *iv_index_tbl;
} heap;
VALUE ary[ROBJECT_EMBED_LEN_MAX];
} as;
};
struct RClass {
struct RBasic basic;
VALUE super;
rb_classext_t *ptr;
struct rb_id_table *m_tbl;
};
34. メソッド呼び出し
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
man = Person.new("taro", 4)
man.name #=> “taro”
メモ
リ
RClass(Person) RObject(man) "taro" 4 空き
35. メソッド呼び出し
man.name #=> “taro”
メモ
リ
RClass(Person) RObject(man) "taro" 4 空き
struct RObject {
struct RBasic basic;
union {
struct {
long numiv;
VALUE *ivptr;
void *iv_index_tbl;
} heap;
VALUE ary[ROBJECT_EMBED_LEN_MAX];
} as;
};