欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

遇到一个面试题关于数组

程序员文章站 2022-04-06 10:52:35
...
往数组添充20万个元素,怎么保证内存开销最小,面试官平常比如几十MB,他能做到10MB,,他说的啥我记不清了,说的很含糊,好像说数组迭代和压缩什么,求大神,这是怎么做到的?

回复内容:

往数组添充20万个元素,怎么保证内存开销最小,面试官平常比如几十MB,他能做到10MB,,他说的啥我记不清了,说的很含糊,好像说数组迭代和压缩什么,求大神,这是怎么做到的?

PHP7测试了下,传统的for循环内存占用比yield实现的迭代器小,但相差不大.

使用生成器的方案是内存最节省的.

phpfunction xrange($start,$end)
{
    for ($i = $start; $i 

内存占用大概是1楼的1/3左右.当然1楼相比最传统的方案($arr=range(1,200000))已经节省了大概50%左右的内存了.
测试环境PHP 5.6.10
额外测试了下,在php7的情况下,确实如@eechen同学所说,基本没差别了.

php$array = new SplFixedArray(200000);
for ($i = 0; $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)

这样?

$arr = new ArrayIterator();
for ($i = 1; $i append($i);
}

还是这样?

$xrange = function($min, $max) {    
    for ($i = $min; $i 

题目意义不明,20w个什么元素,PHP下?还是C下?

为使用PHP7的PHPer点赞!

相关标签: php c 面试题