Как узнать размер (кол-во занимаемых байт) объекта в PHP?

Здравствуйте.
В C++ есть ф-ция sizeof(); для определения размера объекта.
В PHP есть что-либо аналогичное для определения размера объекта?
  • Вопрос задан
  • 5883 просмотра
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
В PHP есть что-либо аналогичное для определения размера объекта?


Нет, потому что в этом нет смысла. Ибо реальный размер структур весьма сложно подсчитать. Например все строковые литералы (имена переменных к примеру) для 10-ти инстансов объектов одного типа будут заменены на указатели в буфер, и суммарный размер уже не так легко подсчитать.

Вариант же с memory_get_usage как предлагается выше тоже не будет работать по причине того, что внутри интерприатора все куда сложнее. Для примера:

class Foo {
    private $bar;
    public function __construct(string $bar) {
       $this->bar = $bar;
    }
}

$start = memory_get_usage();
$a = new Foo('test1');
$middle = memory_get_usage();
$b = new Foo('longer value');
$end = memory_get_usage();

echo $middle - $start, PHP_EOL; // 56
echo $end - $middle, PHP_EOL;  // 56


Собственно логично что раз у нас размер значений разный то и размер интансов должен быть разным. Не забываем так же что между забором потребления памяти у нас есть так же накладные расходы на ссылку на объект + переменную. Так же не забываем что php выделяет память блоками....

словом - возможности точно подсчитать размер инстанса в памяти PHP не предоставляет.
Ответ написан
Комментировать
$before=0;
$a='испытуемая переменная либо массив или объект';
$before = memory_get_usage();
unset($a);
echo 'размер переменной составил: ',$before-memory_get_usage(),' байт';
Ответ написан
Комментировать
atis2345
@atis2345
PHP developer
class MyBigClass
{
    var $allocatedSize;
    var $allMyOtherStuff;
}

function AllocateMyBigClass()
{
    $before = memory_get_usage();
    $ret = new MyBigClass;
    $after = memory_get_usage();
    $ret->allocatedSize = ($after - $before);

    return $ret;
}


stackoverflow.com/questions/1351855/getting-size-i...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы