對象在類中的存儲方式有哪些?
對象類型和整型、字符串等類型一樣,也是PHP中的一種數據類型。都是在程序中用於存儲不同類型數據使用的,在程序運行時它的每部分內容都要先加載到內存中再被使用。那麽對象類型的數據在內存中是如何分配的呢?先來了解一下內存結構。邏輯上內存大體被分為四段,分別為棧空間段、堆空間段、初始化數據段和代碼段,程序中不同類型數據的聲明將會被存在不同的內存段裏面。每段內存的特點如下。
①.棧空間段
棧的特點是空間小但被CPU訪問的速度快,是用戶存放程序中臨時創建的變量。由於棧的後進先出特點,所以棧特別方便用來保存和恢復調用現場。從這個意義上講,我們可以把堆棧看成一個臨時數據寄存、交換的內存區。用於存儲占用空間長度不變並且占用空間小的數據類型的內存段,例如整型1、100、10000等在內存中占用空間是等長的,占用空間都是32位的4個字節。還有double、boolean等都可以存儲在棧空間段中。
②.堆空間段
堆是用於存放進程運行中被動態分配的內存段,它大小並不固定,可動態擴張或縮減。用於存儲數據長度可變或占用內存比較大的數據。例如,字符串、數組和對象就存儲在這段內存中。
③.數據段
數據段用來存放可執行文件中初始化全局變量,換句話說就是存放程序靜態分配的變量。
④.代碼段
代碼段是用來存放可執行文件的操作指令,也就是說它是可執行程序在內存中的鏡像。代碼段需要防止在運行時被非法修改,所以只準許讀取操作,而不允許寫入(修改)操作。例如程序中的函數就存儲在這段內存中。
對象類型的數據就是一種占用空間比較大的數據類型,並且是占用的空間不定長的數據類型,所以對象創建完成以後被存放在對內存中,但對象的引用還是存放在棧裏面的。程序在運行時,占內存中的數據是可以直接存取的,而堆內存是不可以直接存取的內存,但可以通過對象的引用名稱訪問對象中的成員。
對象在類中的存儲方式有哪些?