PHP使用的内存超过了所需文件的数量

时间:2018-11-24 17:33:55

标签: php memory memory-management

使用给定的示例代码:

<?php

if (! function_exists('human_filesize')) {
    function human_filesize($size, $precision = 2, $step = 1000)
    {
        $i = 0;
        $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

        while (($size / $step) > 0.9) {
            $size = $size / $step;

            $i++;
        }

        return round($size, $precision) . ' ' . $units[$i];
    }
}

if (! function_exists('dd')) {
    function dd($vars)
    {
        foreach (func_get_args() as $var) {
            var_dump($var);
        }

        die();
    }
}

$start = microtime(true);
$usage = memory_get_usage(true);

require "brown_corpus.php"; // It's 1.6 MB

$dump[] = round(microtime(true) - $start, 3);
$dump[] = human_filesize(memory_get_usage(true) - $usage);

dd(...$dump); // 0.063ms to run | 38.01 MB memory used

brown_corpus.php是1.6 MB,但是当需要时,脚本会告诉我它正在使用38.01 MB的内存。我一直在阅读,我想知道这是否是因为PHP将所需文件编译为操作码,以便更快地执行?有人可以启发一下它的优缺点吗?也就是说,如果我继续在该要求中搜索数组中的键,那么由于PHP编译文件的方式,现在速度更快了吗?

1 个答案:

答案 0 :(得分:2)

文件的大小与消耗的内存量无关。如果没有看到brown_corpus.php,就不可能知道它是如何消耗内存的,但是请记住,代码(通常)是描述其实际创建的结构的一种简洁的方式。请考虑以下内容:

O(log(n))

将其保存到php文件中,约占70个字节。运行它,它将创建一个包含100,000个元素的数组结构,每个元素都是8字节整数。动臂,已使用800 KB。

实际上,这比这要糟糕得多,这是因为您的系统上如何配置PHP,更不用说PHP带来的各种间接费用(例如,存储数组的方式令人费解-参见{{ 3}})。