Answers
php
$array = new SplFixedArray(200000); for ($i = 0; $i < 200000; ++$i) { $array[$i] = $i; }
11534336 还是多了差不多0.15~~~ 召唤大神
@公子
(Windows8.1 64位, PHP5.6)
https://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-...
http://gywbd.github.io/posts/2014/12/php7-new-hashtable-implementation...
(php7)
红蝶Saika
answered 9 years, 6 months ago
使用生成器的方案是内存最节省的.
php
function xrange($start,$end) { for ($i = $start; $i <= $end; $i++) { yield $i; } } $arr = []; foreach (xrange(1,20000) as $num) { $arr[] = $num; }
内存占用大概是1楼的1/3左右.当然1楼相比最传统的方案($arr=range(1,200000))已经节省了大概50%左右的内存了.
测试环境PHP 5.6.10
额外测试了下,在php7的情况下,确实如@eechen同学所说,基本没差别了.
AKA日天
answered 9 years, 6 months ago
PHP7测试了下,传统的for循环内存占用比yield实现的迭代器小,但相差不大.
<?php
////传统的for循环
//for($i = 0; $i < 200000; $i++) {
// $arr[$i] = $i;
//}
//语法糖迭代器
function xrange($start, $end) {
for ($i = $start; $i <= $end; $i++) {
yield $i;
}
}
foreach (xrange(1, 200000) as $i) {
$arr[$i] = $i;
}
echo memory_get_peak_usage()."\n";
echo memory_get_usage()."\n";
// 传统的for循环: 9789696字节(峰值) 6639888字节
// 语法糖迭代器: 9795176字节(峰值) 6640952字节
werwolf
answered 9 years, 6 months ago