對象類型和整型、字符串等類型一樣,也是PHP中的一種數據類型。都是在程序中用於存儲不同類型數據使用的,在程序運行時它的每部分內容都要先加載到內存中再被使用。那麼對象類型的數據在內存中是如何分配的呢?先來了解一下內存結構。邏輯上內存大體被分為四段,分別為棧空間段、堆空間段、初始化數據段和代碼段,程序中不同類型數據的聲明將會被存在不同的內存段裡面。每段內存的特點如下。
①.棧空間段
棧的特點是空間小但被CPU訪問的速度快,是用戶存放程序中臨時創建的變量。由於棧的後進先出特點,所以棧特別方便用來保存和恢復調用現場。從這個意義上講,我們可以把堆棧看成一個臨時數據寄存、交換的內存區。用於存儲占用空間長度不變並且占用空間小的數據類型的內存段,例如整型1、100、10000等在內存中占用空間是等長的,占用空間都是32位的4個字節。還有double、boolean等都可以存儲在棧空間段中。
②.堆空間段
堆是用於存放進程運行中被動態分配的內存段,它大小並不固定,可動態擴張或縮減。用於存儲數據長度可變或占用內存比較大的數據。例如,字符串、數組和對象就存儲在這段內存中。
③.數據段
數據段用來存放可執行文件中初始化全局變量,換句話說就是存放程序靜態分配的變量。
④.代碼段
代碼段是用來存放可執行文件的操作指令,也就是說它是可執行程序在內存中的鏡像。代碼段需要防止在運行時被非法修改,所以只准許讀取操作,而不允許寫入(修改)操作。例如程序中的函數就存儲在這段內存中。
對象類型的數據就是一種占用空間比較大的數據類型,並且是占用的空間不定長的數據類型,所以對象創建完成以後被存放在對內存中,但對象的引用還是存放在棧裡面的。程序在運行時,占內存中的數據是可以直接存取的,而堆內存是不可以直接存取的內存,但可以通過對象的引用名稱訪問對象中的成員。
>> 本文固定鏈接: http://php.ncong.com/php_course/oop/duixiangfenpei.html
>> 轉載請注明: 恩聰php 2014年07月23日 於 恩聰PHP學習教程 發表
php都是顯式內存分配,沒有隱式分配內存的方法吧.對於php一個變量定義的時候應該就在內存中開辟了一塊空間吧.沒有c那樣可以使用malloc alloc realloc隱士分配內存.
靠,你不搞懂這個問題怎麼學java啊,
堆裡存的是new了以後才分配堆裡的內存空間,
如果只聲明一個對象,是不給他它分配堆內存的
堆裡存的是已經實例化的對象;