Array internals

MiksIr

miksir@home:~$
Так это, кто знает/ковырялся.
Когда происходит ресайз хеш таблицы до следующей степени двойки - происходит "пересортировка" bucket-ов? Ведь меняется маска, получается больше значений и те bucket, что раньше сидели в одном списке, должны быть размазаны по другим спискам, получается?
 

fixxxer

К.О.
Партнер клуба
не то чтобы прямо пересортировка, скорее такое перераскидывание с учетом новой маски, насколько я понял:

https://github.com/php/php-src/blob/master/Zend/zend_hash.c#L94
https://github.com/php/php-src/blob/master/Zend/zend_hash.c#L421

вообще, после прочтения http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html код zend_hash.c весьма понятен - особенно если нажать кнопочку blame
 

MiksIr

miksir@home:~$
Ну перераскидывание, да.
Т.е. если мы заполняем большой массив построчно... то лучше его создать сначала через какой-нить array_fill, ибо там array_init_size используется ;)
 

fixxxer

К.О.
Партнер клуба
если размер заранее известен - можно просто взять SplFixedArray
 
Сверху