我寫這個代碼來測試一些物體的大小,PHPPHP類和VAR內存大小混淆
<?php
class MyClass
{
public $string1="first string";
public $string2="second string";
public $string3="third string";
public function __toString() {
return $this->string;
}
}
function mem() {
return memory_get_usage(false);
}
$before = mem();
$class = new MyClass;
var_dump("new object size: ".(mem() -$before));
$before=mem();
$string = "test";
var_dump("string size: ".(mem() -$before));
$before=mem();
$objcopy = $class;
var_dump("object copy size: ".(mem() -$before));
$before=mem();
$objref = &$class;
var_dump("object reference size: ".(mem() -$before));
,這是在我的系統輸出:
string(20) "new object size: 188"
string(15) "string size: 80"
string(20) "object copy size: 44"
string(25) "object reference size: 72"
我」現在我們相當困惑,爲什麼我們有:$ class> $ string> $ objref> $ objcopy
不應該改爲:$ class = $ objcopy> $ string> $ objref?
$其實objcopy把包含3串內,而不是$的字符串是單個的..
有人能解釋我如何PHP處理內存與這種類型的對象?
在此先感謝。
這些內存測量是否在多次運行中保持不變? – Halcyon
是的,我嘗試了不同的時間 – Joseph
嘗試'memory_get_usage(true)',根據手冊將「獲得從系統分配的實際內存大小」。 –