亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP筆記 變量和內存管理

發布時間:2020-08-06 17:43:44 來源:網絡 閱讀:719 作者:daweilang 欄目:web開發

鳥哥的博客是個大寶庫,正在從頭看起。


《深入理解PHP內存管理之誰動了我的內存》

http://www.laruence.com/2011/03/04/1894.html


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=136

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),那些主腳本(比如:通過瀏覽器請求的的腳本)和每個函數或者方法也都有作用域。  


以上翻看鳥哥的11年的blog文章,對PHP的變量和內存管理有了一個初步的認識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闵行区| 五台县| 临朐县| 东光县| 镇坪县| 华蓥市| 出国| 四川省| 奎屯市| 西昌市| 建湖县| 兴仁县| 广宗县| 微山县| 从化市| 元阳县| 阿瓦提县| 哈巴河县| 大名县| 盐城市| 七台河市| 友谊县| 闸北区| 宁河县| 顺义区| 日喀则市| 安仁县| 尤溪县| 中阳县| 克拉玛依市| 清涧县| 忻州市| 长垣县| 城市| 上饶市| 互助| 南溪县| 怀柔区| 鄂托克前旗| 谷城县| 菏泽市|