物件型別在記憶體中的分配

2022-05-05 19:21:05 字數 937 閱讀 1091

今天,我們來講講物件型別在記憶體中的分配

物件型別和整型、字串等型別一樣,也是php中的一種資料型別,在程式中儲存不同型別的資料,在程式執行時它的每一部分內容都要載入到記憶體中再被使用。那麼物件型別的資料在記憶體中是如何分配的呢?咱們先來了解下記憶體結構,邏輯上記憶體大體被分為四段,分別為:資料段**段,程式中不同型別資料的宣告將會被存放在不同的記憶體段裡面,每段記憶體的特點是這樣的:

1、棧棧的特點就是空間小但被cpu訪問的速度快,適合存放程式中臨時建立的變數。由於棧的先進後出的特點,所以棧特別適合用於儲存和恢復呼叫現場。從這個意義上講,我們可以把棧看成是乙個臨時資料寄存、交換的記憶體區,乙個用於儲存占用空間定長且占用空間小的資料的記憶體段。例如整型1、100、1000等在記憶體中占用的空間是等長的,占用的空間都是32位4個位元組。還有double、boolean等都可以儲存在棧空間中。

2、堆堆是用於在程式執行過程中被動態分配的記憶體段,它的大小不固定,可動態地擴張或縮減。用於儲存資料長度可變或占用記憶體比較大的資料。例如,字串、陣列和物件就存放在這段記憶體中。

3、資料段

資料段用來存放可執行檔案中已初始化的全域性變數,換句話說就是存放程式中靜態分配的變數。

4、**段

**段用來存放可執行檔案的操作指令,也就是說它是可執行檔案在記憶體中的映象。**段需要防止程式在執行的過程中被非法修改,所以只准許讀取操作,而不允許寫入(修改)操作。例如,程式中的函式就存放在這段記憶體中。

回過頭來,我們來說說物件型別的資料在記憶體中如何分配的,物件型別的資料占用的空間比較大,且占用的空間不定長,所以物件建立完成以後被存放在堆記憶體中,但物件的引用名稱存放在棧裡面。程式在執行時,棧裡的資料是可以直接訪問的,而堆記憶體中的資料是不可以直接訪問的,但可以通過物件的引用名稱訪問物件中的成員。

PHP物件型別在記憶體中的分配

物件型別和整型 字串等型別一樣,也是php中的一種資料型別。都是在程式中用於儲存不同型別資料使用的,在程式執行時它的每部分內容都要先載入到記憶體中再被使用。那麼物件型別的資料在記憶體中是如何分配的呢?先來了解一下記憶體結構。邏輯上記憶體大體被分為四段,分別為棧空間段 堆空間段 初始化資料段和 段,程...

PHP物件型別在記憶體中的分配

物件型別和整型 字串等型別一樣,也是php中的一種資料型別。都是在程式中用於儲存不同型別資料使用的,在程式執行時它的每部分內容都要先載入到記憶體中再被使用。那麼物件型別的資料在記憶體中是如何分配的呢?先來了解一下記憶體結構。邏輯上記憶體大體被分為四段,分別為棧空間段 堆空間段 初始化資料段和 段,程...

PHP物件在記憶體堆疊中的分配

物件在php裡面和整型 浮點型一樣,也是一種資料類,都是儲存不同型別資料用的,在執行的時候都要載入到記憶體中去用,那麼物件在記憶體裡面是怎麼體現的呢?記憶體從邏輯上說大體上是分為4段,棧空間段 堆空間段 段 初始化靜態段,程式裡面不同的宣告放在不同的記憶體段裡面。資料段 data segment 通...