我一直在使用一些字符串在PHP中使自己的框架... 有什麼,「困擾」我。Php數組字符串或var字符串?
$var = "hello!";
$arr = array("h","e","l","l","o","!");
有人能告訴我哪一個($var
或$arr
)使用更多的內存那麼其他的呢?爲什麼?
乍一看,我會說數組將使用更多的內存,因爲它必須將每個字符放置在數組本身中,但我不確定。
我一直在使用一些字符串在PHP中使自己的框架... 有什麼,「困擾」我。Php數組字符串或var字符串?
$var = "hello!";
$arr = array("h","e","l","l","o","!");
有人能告訴我哪一個($var
或$arr
)使用更多的內存那麼其他的呢?爲什麼?
乍一看,我會說數組將使用更多的內存,因爲它必須將每個字符放置在數組本身中,但我不確定。
陣列將使用更多的內存比串
的字符串和陣列是在他們自己的權利的zval結構,但所述陣列中的每個元素是一個字符串,以及,每個都有其自己的zval;陣列佔用了大量的內存。還有一個事實,即一個數組元素既包括鍵和值,分別使用存儲器
取本article的讀取看到的只是多少內存使用由陣列結構
陣列需要(很多!)更多的記憶。
PHP中的字符串是內存中的一個對象,它保存(例如)長度和指向內存中實際數據的指針。我認爲,在大多數平臺上,這些平臺可爲您提供32位長度和64位指針。對於某些CPU的16字節對齊要求,這意味着每個字符串至少有32個字節(描述符+實際數據) - 即使它只是一個字符。
您示例中的數組包含6個字符串。這將是192個字節加上存儲數組的開銷,這也不是微不足道(至少需要128個字節)。
免責聲明:在這個答案中使用的數字是一個粗略的近似值 - 期望遠遠超過這裏提到的開銷。
一個字符串是一個zval值,一個字符串數組是多個zvals加一個數組zval。每個zval都會增加一些開銷。在實踐中,這些信息大多不相關,因爲您應根據自己的預期用途編寫一個或另一個,而不是基於內存消耗的最小差異。 – deceze 2014-11-05 08:19:09