首頁/ 汽車/ 正文

flutter之dartsdk--object篇一

object很多但很重要,目前本人懵圈狀態中,慢慢啃。。。

一,理解vm呼叫rawobject物件,編譯器轉換object物件

下圖為編譯器能夠轉換的object物件,且內建相應的cid,有些會存入object_store中

flutter之dartsdk--object篇一

一,理解一些介面函式(

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支援在一次快速操作中釋放所有塊

相關文章

頂部