首頁 後端開發 php教程 PHP變數和記憶體管理的學習筆記

PHP變數和記憶體管理的學習筆記

Mar 12, 2017 pm 01:38 PM
php變數

1、memory_get_usage 函數

int memory_get_usage ([ bool $real_usage = false ] )


PHP腳本使用的記憶體(不含memory_get_usage()函數本身佔用的記憶體)

memory_get_usage()的參數$real_usage,預設為FALSE;當設定為TRUE 時,得到的記憶體值為PHP 記憶體管理所佔用的記憶體。

//php分配到的内存
var_dump(memory_get_usage(true));
//php使用内内存
var_dump(memory_get_usage());
登入後複製

結果

int 262144
int 239368


PHP的記憶體管理機制是:預先分配一塊空間,用來儲存變數,當空間不夠時,再申請一塊新的空間。

memory_get_usage(true)即為預先分配的記憶體。


之前沒有註意過PHP頁面的記憶體使用,以後優化頁面時候也應該用這個函數來分析程式碼。


2、變數賦值與記憶體

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = $a;
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());
登入後複製

結果

int 239776
int 239912
int 240000
# int 239912
int 239776


239912-239776=136

240000-239912=88


$a和$b賦值所使用的記憶體不同,原因是$b賦值並沒有分配內存,這88個位元組是輸出函數佔用的。

另外銷毀$b,並不影響$a使用的內存,這個是內存管理引用計數的原因

改一下例子就能很清楚的了解變量賦值和內存的關係

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = "Hello World";
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());
登入後複製

結果

int 239816
int 239952
int 240088
int 239952
int 239816

239952-239816

##240088-239952=136


#另外引用賦值佔用記憶體規則和直接賦值相似,這也涉及記憶體管理的參考計數規則


3、php垃圾回收機制,這部分了解的還不夠深入,簡單記錄一個函數

xdebug_debug_zval 需要安裝xdebug擴充

$a = "Hello World";
xdebug_debug_zval('a');
登入後複製
輸出

a:

(refcount=1, is_ref=0),

string 'Hello World' (length=11)

refcount 指向該值的變數數量

is_ref 代表是否有位址引用

類型


變數賦值的時候:is_ref為false  refcount為1

手冊位址

引用計數的基本知識

http://php.net/manual/zh/features.gc.refcounting-basics.php

#每個

php變數存在一個叫做"zval"的變數容器中。一個zval變數容器,除了包含變數的類型和值,還包括兩個位元組的額外資訊。第一個是"is_ref",是個bool值,用來識別這個變數是否是屬於引用集合(reference set)。透過這個位元組,php引擎才能把普通變數和引用變數區分開來,由於php允許使用者透過使用&來使用自訂引用,zval變數容器中還有一個內部引用計數機制,來優化記憶體使用。第二個額外位元組是"refcount",用以表示指向這個zval變數容器的變數(也稱為符號即symbol)個數。所有的符號存在一個符號表中,其中每個符號都有作用域(scope),那些主腳本(例如:透過瀏覽器請求的的腳本)和每個函數或方法也都有作用域。   


以上是PHP變數和記憶體管理的學習筆記的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP Notice: Undefined variable:解決方法 PHP Notice: Undefined variable:解決方法 Jun 25, 2023 pm 04:18 PM

在PHP開發中,我們常常會遇到PHPNotice:Undefinedvariable的錯誤提示。這個錯誤提示表示我們在程式碼中使用了一個未定義的變數。雖然這個錯誤提示不會導致程式碼崩潰,但是它會影響程式碼的可讀性和可維護性。下面,本文將為大家介紹一些解決這個錯誤的方法。 1.在開發過程中使用error_reporting(E_ALL)函數在PHP開發中,我們可

如何在PHP中使用數字變數 如何在PHP中使用數字變數 Sep 13, 2023 pm 12:46 PM

如何在PHP中使用數字變數在PHP中,數字變數是一種無需聲明而直接使用的變數類型。可以使用數字變數進行數學計算、數據比較和其他數值操作。本文將介紹如何在PHP中使用數字變量,並提供具體的程式碼範例。定義數字變數在PHP中,定義數字變數非常簡單,只要直接給變數一個數字。下面是一個範例:$number=10;在上面的程式碼中,我們定義了一個名為$numb

PHP Notice: Undefined variable: arr in的解決方法 PHP Notice: Undefined variable: arr in的解決方法 Jun 22, 2023 am 10:21 AM

PHPNotice:Undefinedvariable:arrin的解決方法在PHP程式設計中,我們常常會遇到「Notice:Undefinedvariable」這個錯誤提示。這個錯誤提示一般是因為訪問了未定義的變數或變數未被初始化所導致的。對於這個問題,我們需要及時找到問題並解決。在本文中,我們將重點討論PHPNotice:Undefin

如何快速排除PHP變數未定義錯誤? 如何快速排除PHP變數未定義錯誤? Dec 17, 2023 am 10:23 AM

如何快速排除PHP變數未定義錯誤?在PHP開發中,常會遇到變數未定義的錯誤。這是因為在程式碼中使用了一個未賦值的變數。當遇到這種錯誤時,我們需要迅速找到錯誤的原因並解決它。以下是一些快速排除PHP變數未定義錯誤的方法,可幫助您更快定位和修復錯誤。開啟錯誤報告:當我們開啟錯誤報告時,PHP會顯示所有的錯誤和警告訊息,包括變數未定義錯誤。我們可以透過在代碼的開

PHP Notice: Undefined variable: sql的解決方法 PHP Notice: Undefined variable: sql的解決方法 Jun 23, 2023 am 08:51 AM

在開發PHP應用程式時,如果遇到了"Undefinedvariable:sql"的提示,這通常意味著您正在引用一個未定義的變數。這可能是由於許多原因引起的,例如變數名稱拼字錯誤、作用域問題或程式碼中的語法錯誤等。在本篇文章中,我們將探討這個問題的各種原因,並提供一些解決這個問題的方法。 1.變數名稱拼字錯誤在您的PHP程式碼中,如果變數名稱不正確或拼字錯誤,系

如何透過引用傳遞PHP變數 如何透過引用傳遞PHP變數 Aug 26, 2023 am 09:01 AM

在PHP中,您可以使用和號(&)符號將變數按引用而不是按值傳遞。這樣可以在函數或方法內修改原始變數。主要有兩種方式可以透過引用傳遞PHP變數:使用ampersand符號在函數/方法聲明中使用和符號將變數傳遞給函數/方法時在函數/方法聲明中使用和號在PHP中,您可以使用函數/方法宣告中的和號符號(&)透過引用傳遞變數。以下是更新的解釋:要透過在函數/方法聲明中使用&符號來傳遞引用變量,您需要在函數/方法定義中在參數名稱之前包含&符號。這表示參數應該透過引用傳遞,允許

PHP Notice: Undefined variable: result的解決方法 PHP Notice: Undefined variable: result的解決方法 Jun 22, 2023 pm 01:32 PM

PHPNotice:Undefinedvariable:result是指在PHP程式中呼叫了一個未定義的變數result,這會導致程式產生Notice層級的警告。這種情況一般是由於程式設計師在編寫PHP程式碼時未正確定義變數或變數的作用域所造成的。如果不及時解決,這種Notice層級的警告可能會導致程式的運行出現問題。那麼,如何解決PHPNotice:

PHP程式設計有哪些常見的變數? PHP程式設計有哪些常見的變數? Jun 12, 2023 am 10:06 AM

在PHP程式設計中,變數是儲存值的基本單元,用於在程式執行過程中儲存和使用資料。在PHP中,變數可以被賦予不同的資料類型,包括整數、浮點型、字串、陣列等等。在本文中,我們將介紹PHP程式設計中常見的變數及其用法。簡單變數簡單變數是最常見的變數類型,它們可以儲存整數、浮點數、字串等常規資料類型。在PHP中,未定義變數的初始值為NULL。以下是幾個實例:整數變數:$

See all articles