php - PHP 使用的内存比所需的文件多
问题描述
以给定的示例代码为例:
<?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 编译文件的方式?
解决方案
文件的大小与它消耗的内存量无关。没有看到 brown_corpus.php,就不可能知道它是如何消耗内存的,但请记住,代码(通常)是描述它实际创建的结构的一种浓缩方式。考虑以下:
$arr = array();
for ($i = 0; $i < 100000; $i++) {
$arr[$i] = $i;
}
将其保存到一个 php 文件中,它占用大约 70 个字节。运行它,它将创建一个包含 100,000 个元素的数组结构,每个元素都是一个 8 字节的整数。繁荣,使用了 800 KB。
实际上,它比这更糟糕,因为 PHP 是如何在您的系统上配置的,更不用说 PHP 强加的各种开销(例如,它存储数组的方式令人难以置信——请参阅https://nikic .github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html)。
推荐阅读
- migration - Http 客户端升级到 Micronaut 3.0 失败(ClassNotFoundException AsyncSSLPrivateKeyMethod)
- html - 我该如何修复这个 vue-carousel?
- firebase-cloud-messaging - 我可以在 Firebase 云消息传递控制台中向特定用户发送通知吗
- angular - 我想返回在 d url 中获取的特定 id 详细信息
- html - 避免跨度剪切/新行
- android - 任务 ':app:minifyReleaseWithR8' inJenkins 执行失败
- javascript - 在函数中为 useState 变量设置值时出错
- javascript - 仅显示一次预加载器 jquery
- asp.net - 异常 - 无法获取转换结果标头。数据传输错误。数据传输错误 109
- ios - SwiftUI 移动修改器不适用于 iPhone 和 iPad iOS 15 模拟器