Я разбираюсь с некоторыми строками в php, чтобы создать свой собственный фреймворк …
Есть кое-что, что «беспокоит» меня.
$var = "hello!";
$arr = array("h","e","l","l","o","!");
Может кто-нибудь сказать мне, какой ($var
или же $arr
) использует больше памяти, чем другой? И почему?
На первый взгляд, я бы сказал, что массив будет использовать больше памяти, поскольку он должен располагать каждый символ внутри самого массива, но я не уверен.
Массив будет использовать больше памяти, чем строка
Строка и массив сами по себе являются структурами zval, но каждый элемент массива также является строкой, каждый со своим собственным zval; массивы занимают удивительное количество памяти. Существует также тот факт, что элемент массива содержит и ключ, и значение, каждое из которых использует память
Прочитайте это статья чтобы увидеть, сколько памяти используется структурой массива
Массив занимает (много!) Больше памяти.
Строка в PHP — это объект в памяти, который содержит (например) длину и указатель на фактические данные в памяти. Я думаю, что на большинстве платформ это дает вам 32 бита для длины и 64 бита для указателя. С 16-байтовыми требованиями выравнивания от некоторых процессоров это означает, что каждая строка будет по крайней мере 32 байта (дескриптор + фактические данные) — даже если это будет только один символ.
Массив из вашего примера содержит 6 строк. Это будет 192 байта плюс затраты на хранение массива, что также немаловажно (рассчитывайте как минимум на 128 байтов).
Отказ от ответственности: числа, используемые в этом ответе, являются приблизительным приближением — ожидайте намного больше накладных расходов, чем упомянуто здесь.