遇到一個面試題關於數組

來源:互聯網
上載者:User
往數組添充20萬個元素,怎麼保證記憶體開銷最小,面試官平常比如幾十MB,他能做到10MB,,他說的啥我記不清了,說的很含糊,好像說數組迭代和壓縮什麼,求大神,這是怎麼做到的?

回複內容:

往數組添充20萬個元素,怎麼保證記憶體開銷最小,面試官平常比如幾十MB,他能做到10MB,,他說的啥我記不清了,說的很含糊,好像說數組迭代和壓縮什麼,求大神,這是怎麼做到的?

PHP7測試了下,傳統的for迴圈記憶體佔用比yield實現的迭代器小,但相差不大.

使用產生器的方案是記憶體最節省的.

phpfunction 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同學所說,基本沒差別了.

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)

這樣?

$arr = new ArrayIterator();for ($i = 1; $i <= 200000; $i++) {    $arr->append($i);}

還是這樣?

$xrange = function($min, $max) {        for ($i = $min; $i <= $max; $i++) {        yield $i;    }};$xrange(1,200000);

題目意義不明,20w個什麼元素,PHP下?還是C下?

為使用PHP7的PHPer點贊!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.