2014-11-05 2 views
0

Я начал с некоторыми строками в php, чтобы создать свой собственный фрейм ... Есть что-то, что «беспокоит» меня.Строка массива Php или строка var?

$var = "hello!"; 

$arr = array("h","e","l","l","o","!"); 

Может кто-нибудь сказать мне, который один ($var или $arr) использует больше памяти, то другую? И почему?

На первый взгляд я бы сказал, что массив будет использовать больше памяти, поскольку он должен размещать каждый символ внутри самого массива, но я не уверен.

+1

Одна строка - это одно значение zval, массив строк - это несколько zvals плюс массив zval. Каждый zval добавляет немного накладных расходов. На практике эта информация в основном неактуальна, так как вы должны писать то или другое в зависимости от вашего предполагаемого использования, а не на основе минимальных различий в потреблении памяти. – deceze

ответ

3

Массив будет использовать больше памяти, чем строки

Строка и массив являются Zval структуры в их собственном праве, но каждый элемент массива является строкой, а также, каждый со своим собственным Zval; массивы занимают удивительный объем памяти. Существует также тот факт, что элемент массива содержит как ключ и значение, каждый из которых использует память

Возьмите чтение этого article, чтобы увидеть, сколько памяти используются для структуры массива

2

Массив принимает (много!) больше памяти.

Строка в PHP - это объект в памяти, который содержит (например) длину и указатель на фактические данные в памяти. Я думаю, что на большинстве платформ, которые дают вам 32 бита для длины и 64 бит для указателя. С 16-байтными требованиями к выравниванию от некоторых процессоров это означает, что каждая строка будет составлять не менее 32 байт (дескриптор + фактические данные) - даже если это только один символ.

Массив из вашего примера содержит 6 строк. Это будет 192 байта плюс накладные расходы на хранение массива, который также не является незначительным (рассчитывается как минимум на 128 байт).

Отказ от ответственности: цифры, используемые в этом ответе, являются приблизительным приближением - ожидайте гораздо больше накладных расходов, чем указано здесь.

Смежные вопросы