中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

PHP筆記變量和內(nèi)存管理

鳥哥的博客是個(gè)大寶庫(kù),正在從頭看起。

創(chuàng)新互聯(lián)建站長(zhǎng)期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為大姚企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,大姚網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

《深入理解PHP內(nèi)存管理之誰動(dòng)了我的內(nèi)存》

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

1、memory_get_usage 函數(shù)

int memory_get_usage ([ bool $real_usage = false ] )

PHP腳本使用的內(nèi)存(不含 memory_get_usage() 函數(shù)本身占用的內(nèi)存)

memory_get_usage()的參數(shù)$real_usage,默認(rèn)為 FALSE;當(dāng)設(shè)置為 TRUE 時(shí),得到的內(nèi)存值為PHP 內(nèi)存管理占用的內(nèi)存。

//php分配到的內(nèi)存
var_dump(memory_get_usage(true));
//php使用內(nèi)內(nèi)存
var_dump(memory_get_usage());

結(jié)果

int 262144
int 239368

PHP的內(nèi)存管理機(jī)制是:預(yù)先分配一塊空間,用來存儲(chǔ)變量,當(dāng)空間不夠時(shí),再申請(qǐng)一塊新的空間。

memory_get_usage(true)即為預(yù)先分配的內(nèi)存。

之前沒有注意過PHP頁(yè)面的內(nèi)存使用,以后優(yōu)化頁(yè)面時(shí)候也應(yīng)該用這個(gè)函數(shù)來分析代碼。

2、變量賦值和內(nèi)存

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());

結(jié)果

int 239776
int 239912
int 240000
int 239912
int 239776

239912-239776=136

240000-239912=88

$a和$b賦值所使用的內(nèi)存不同,原因是$b賦值并沒有分配內(nèi)存,這88個(gè)字節(jié)是輸出函數(shù)占用的。

另外銷毀$b,并不影響$a使用的內(nèi)存,這個(gè)是內(nèi)存管理引用計(jì)數(shù)的原因

改一下例子就能很清楚的了解變量賦值和內(nèi)存的關(guān)系

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());

結(jié)果

int 239816
int 239952
int 240088
int 239952
int 239816

239952-239816=136

240088-239952=136

另外引用賦值占用內(nèi)存規(guī)則和直接賦值相似,這也涉及到內(nèi)存管理的引用計(jì)數(shù)規(guī)則

3、php垃圾回收機(jī)制,這部分了解的還不夠深入,簡(jiǎn)單記錄一個(gè)函數(shù)

xdebug_debug_zval 需要安裝xdebug擴(kuò)展

$a = "Hello World";
xdebug_debug_zval('a');

輸出

a:

(refcount=1, is_ref=0),string 'Hello World' (length=11)

refcount 指向該值的變量數(shù)量

is_ref 代表是否有地址引用

類型



變量賦值的時(shí)候:is_ref為false  refcount為1

手冊(cè)地址

引用計(jì)數(shù)的基本知識(shí)

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

每個(gè)php變量存在一個(gè)叫"zval"的變量容器中。一個(gè)zval變量容器,除了包含變量的類型和值,還包括兩個(gè)字節(jié)的額外信息。第一個(gè)是"is_ref",是個(gè)bool值,用來標(biāo)識(shí)這個(gè)變量是否是屬于引用集合(reference set)。通過這個(gè)字節(jié),php引擎才能把普通變量和引用變量區(qū)分開來,由于php允許用戶通過使用&來使用自定義引用,zval變量容器中還有一個(gè)內(nèi)部引用計(jì)數(shù)機(jī)制,來優(yōu)化內(nèi)存使用。第二個(gè)額外字節(jié)是"refcount",用以表示指向這個(gè)zval變量容器的變量(也稱符號(hào)即symbol)個(gè)數(shù)。所有的符號(hào)存在一個(gè)符號(hào)表中,其中每個(gè)符號(hào)都有作用域(scope),那些主腳本(比如:通過瀏覽器請(qǐng)求的的腳本)和每個(gè)函數(shù)或者方法也都有作用域。  

以上翻看鳥哥的11年的blog文章,對(duì)PHP的變量和內(nèi)存管理有了一個(gè)初步的認(rèn)識(shí)。

當(dāng)前題目:PHP筆記變量和內(nèi)存管理
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article2/jippic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站、標(biāo)簽優(yōu)化手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
贵阳市| 六安市| 谢通门县| 蛟河市| 永丰县| 长沙市| 海安县| 邯郸市| 长兴县| 台湾省| 田东县| 泸溪县| 威海市| 和平区| 牟定县| 门头沟区| 乾安县| 石林| 衡阳县| 石家庄市| 马山县| 察雅县| 肃宁县| 阳高县| 屯留县| 桐乡市| 南宁市| 平定县| 沙雅县| 行唐县| 张家港市| 布拖县| 屏东市| 宣武区| 迁西县| 云梦县| 象州县| 六枝特区| 基隆市| 仙游县| 勐海县|