All streams
Search
Write a publication
Pull to refresh

Comments 10

Как будто попал в старый добрый хабр.

Статья о програмированиии а не вайбкодировании и написании промптов

Packed (вектор). Значения хранятся подряд в одном блоке памяти. Есть ёмкость (capacity). Пока есть запас — вставки производятся в конец (сложность O(1)). Когда места не хватает — аллоцируется больший блок памяти, старые элементы копируются в него.

А какова там capacity?

Давайте проверим. Простой скрипт, в котором массив увеличивается, а мы измеряем занимаемую память. Должны быть "прыжки" при выделении емкости.

<?php
$arr = [];
$prev = memory_get_usage();

echo "Элемент\tПамять\t\tДельта\n";
echo "==========================================\n";

for ($i = 0; $i < 100000; $i++) {
    $arr[] = $i;
    $curr = memory_get_usage();
    $delta = $curr - $prev;
    
    if ($delta > 0 && $i > 0) {
        echo "$i\t\t" . number_format($curr) . " B\t" . number_format($delta) . " B\n";
    }
    
    $prev = $curr;
}
?>

И вот ответ:

P.S.: Добавлю в статью. Полезно.

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

Спасибо за статью!

В одном из массиве подберем ключи таким образом

Опечатка.

Благодарю, поправил!

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

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

А если ооп-подход использовать и во вложенных уровнях массива использовать объекты, смысл теряется, поскольку они и так модифицируюся. Но и расход памяти на них иной.

Шикарная статья, давно такого не было

Очень полезная информация и очень хорошо написано, спасибо! "Хотим ищо" =)

Sign up to leave a comment.

Articles