Как узнать сколько памяти занимает переменная?

rdva

Новичок
Как узнать сколько памяти занимает переменная?

Также актуально, если переменная является массивом.
 

Alexandre

PHPПенсионер
думаю вполне возможно,
смотрим в кодах структуру zval
или выводим sizeof(zval)
если интересно могу посмотреть, но кажется это 16 байт.
для строк эьто дополнительно еще кол-во байт занимаемой строкой + 1

с массивами немного сложнее - это стркутура Hashtable, которая связана со структурами zval
если ассоциативный массив - то еще дополнительно увеличиваем на кол-во символов в строке индекса
то же самое относится и к значению.
 

HraKK

Мудак
Команда форума
Alexandre
никак. Или _очень_ сложно что для ТС == никак
 

Alexandre

PHPПенсионер
тема уже поднималась,
для справки: sizeof zval : 16
sizeof HashTable 44
+ по 32 байта на каждую пару кей-валуе zval если это строка, то дополнительно кол-во байт в строке+1
 

С.

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

Krishna

Продался Java
тема уже поднималась,
для справки: sizeof zval : 16
sizeof HashTable 44
+ по 32 байта на каждую пару кей-валуе zval если это строка, то дополнительно кол-во байт в строке+1
Кстати, для 64битных платформ, насколько я понимаю, эти значения нужно удвоить...

А про конкретную структуру HashTable где можно почитать? )

-~{}~ 30.09.08 19:25:

Вот, кстати ещё пища для размышлений:

PHP:
<?php
$intMem2 = 0;
$intMem1 = 0;
$intMem1 =  memory_get_usage();
$x = 1;
$intMem2 =  memory_get_usage();
   	    var_dump($intMem2-$intMem1);
?>
Выдаёт:
int(136)
[/qquote]

FreeBSD 7.0 am64 PHP 5.2.6

Больно уж расходится с теорией ))

-~{}~ 30.09.08 19:25:

Выдаёт:
-~{}~ 30.09.08 19:26:

Итить, грешный запрет на редактирование....

В общем, я полагаю все поняли.
 

Angerslave

Новичок
Обсуждалось уже. Не приспособлен PHP к тонкому контролю за памятью... Да и не нужно это.
 

Krishna

Продался Java
Angerslave
Оправдывать незнание абстрактной неприспособленностью конечно удобно, но не конструктивно.
 

Angerslave

Новичок
Krishna
И какие же методы тонкого контроля за памятью есть у PHP? И второй вопрос - а зачем они?
 

Krishna

Продался Java
Я не говорил, что есть методы. У меня есть необходимость прикинуть необходимые объёмы памяти для определённого набора объектов.
И заявы, что "пхп для этого не предназначен" меня не удовлетворяют :)
 

dimagolov

Новичок
Krishna, в чем проблема? Код у тебя уже есть, только вместо $x = 1; пишешь $x = new MyObject(); и результат у тебя в кармане. Выяснять почему он именно такой - бесполезное занятие, так как это данность посланная нами разработчиками текущей версии PHP. Будет новая версия или платформа, то будет новая данность, которую мы сможем только принять, но никак не изменить.

аминь :)
 

Angerslave

Новичок
Krishna
Если не секрет, зачем прикидывать? Запускать пхп-скрипт демоном? Запустить 1000 потоков скрипта и вписаться в рамки памяти? Банальное любопытство? Всё-таки PHP это скриптовый язык, поэтому "абстрактная неприспособленность" просто не позволит достоверно узнать сколько памяти занимает конкретная переменная. Это всё равно что спрашивать почему холодильник не умеет жарить картошку. Поэтому проще или забить, или взять более подходящий инструмент.
 

Krishna

Продался Java
В моём конкретном случае задача заключалась в выборе стратегии.

Нужно сделать конвертер БД из одного представления в другой.
При этом на данный момент исходная база (точнее базы - 2 SQL и 1 DBF) и конечная база не определены до конца, точно понятно что откуда и куда станет только ближе к концу работы поэтому система должна быть максимально гибкая. Работа с исходной и конечной базой должны быть максимально независимы друг от друга. Как один из способов добиться этого я рассматривал вариант полной выгрузки базы в память, в виде объектов промежуточного уровня, с сохранением связей между ними. Это несколько облегчило бы проектирование системы из независимых компонент. Но, база достаточно большая и под вопросом оказалась возможность уместить её в ОЗУ в данном виде.
Для подсчёта опытном способом необходимо выполнить слишком много потенциально ненужной работы. Отсюда и желание прикинуть размеры аналитически. Ну и добавьте к этому "научный интерес" :)

-~{}~ 01.10.08 03:32:

Angerslave
Ещё раз, про картошку. Я не говорю, что пхп должен сообщить мне сколько ему нужно самостоятельно. Я говорю о способах подсчитать это своими руками. Поэтому, аналогию считаю неудачной.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я говорю о способах подсчитать это своими руками.
подсчитать своими руками можно в любом языке программирования. Язык тут вообще не при чем.
Нормальная аналогия.
 

Krishna

Продался Java
Ну так кто-нибудь может по существу высказаться о том почему 136 байт на одну переменную выделяется?
 
Сверху