object很多但很重要,目前本人懵圈狀態中,慢慢啃。。。
一,理解vm呼叫rawobject物件,編譯器轉換object物件
下圖為編譯器能夠轉換的object物件,且內建相應的cid,有些會存入object_store中
一,理解一些介面函式(
RawObject物件統一被v
m使用)
static
void
initializeHandle
(
Object
*
obj
,
RawObject
*
raw_ptr
)
{
if
(
raw_ptr
!=
Object
::
null
())
{
obj
->
SetRaw
(
raw_ptr
);
}
else
{
obj
->
raw_
=
Object
::
null
();
Object
fake_object
;
obj
->
set_vtable
(
fake_object
.
vtable
());/
/Field物件對應cid,Fli開頭的對應Pointer,NativeFunction等cid
}
}
static
Object
&
Handle
(
Zone
*
zone
,
RawObject
*
raw_ptr
)
{
Object
*
obj
=
reinterpret_cast<
Object
*>(
VMHandles
::
AllocateHandle
(
zone
));
initializeHandle
(
obj
,
raw_ptr
);
return
*
obj
;
}
static
Object
&
ZoneHandle
(
Zone
*
zone
,
RawObject
*
raw_ptr
)
{
Object
*
obj
=
reinterpret_cast<
Object
*>(
VMHandles
::
AllocateZoneHandle
(
zone
));
initializeHandle
(
obj
,
raw_ptr
);
return
*
obj
;
}
當呼叫
Library
&
library
=
Library
::
Handle
(
zone
);會得到一個原始物件指標raw,對應內建library的類cid列表,其他以此類推.
AllocateScopedHandle,AllocateZoneHandle只是對應的記憶體分配不同
zone_blocks_,區域塊
scoped_blocks_作用域塊
zone解釋如下:zone支援快速分配小塊記憶體。不能單獨釋放塊,但zone支援在一次快速操作中釋放所有塊