美文网首页PHP经验分享
代码优化和效率提升的方法(四)多出的4M内存哪儿去了?

代码优化和效率提升的方法(四)多出的4M内存哪儿去了?

作者: 公式般欢笑 | 来源:发表于2020-03-04 00:07 被阅读0次

我们用一段代码来测试内存的占用情况:

<?php
$mem=memory_get_usage();
for($i=0;$i<1000000;$i++){
    $arr[$i]=$i;
}
$mema=memory_get_usage();
$memused=$mema-$mem;
echo '++ memory used:',$mema-$mem,"\n";


$arr=[];
$mem=memory_get_usage();
for($i=1000000;$i>0;$i--){
    $arr[$i]=$i;
}
$mema=memory_get_usage();
echo '--memory used:',$mema-$mem,"\n";

echo 'sub result(M):', ($mema-$mem-$memused)/1024/1024,"\n";

执行这段代码,可以得到如下的结果:

$ /program/bin/php/php7/bin/php arr.php
++ memory used:33558720
--memory used:37748928
sub result(M):3.99609375

可以看出,‘--’比‘++’多用了将近4M的内存。
为什么会出现这样的情况呢?
通过分析PHP的HashTable的源码可以看出,PHP的数组结构有两种,分别是packed array 和 hash array。
packed array的存储方式是直接将值压入对应的bucket中,其bucket的排列方向与数组下标一致。
hash array是先计算出一个hash值,先存储hash值,然后将其指向一个存储具体数据的bucket。
在我们的代码中,++的方式与packed array的存储方式一致,因此不需要计算哈希值,而--的方式最开始的下标过大,PHP会自动将其转存为hash array。因为多出了存储哈希值的内存块,所以内存必然要比packed array要大得多。

相关文章

  • 代码优化和效率提升的方法(四)多出的4M内存哪儿去了?

    我们用一段代码来测试内存的占用情况: 执行这段代码,可以得到如下的结果: 可以看出,‘--’比‘++’多用了将近4...

  • 代码优化和效率提升的方法(一)

    1 提前return 在有些时候,写代码我们经常会写成这样的格式,导致代码层级过高,代码可读性变差。 这时候我们...

  • jvm原理

    35 个 Java 代码性能优化总结 优化代码可以减小代码的体积,提高代码运行的效率。从 JVM 内存模型谈线程安...

  • 性能优化

    一。内存优化的方法就是: 1.降低运行时内存,2.代码优化,3.内存泄漏优化 (一)。降低运行时内存 1. 减少a...

  • 编译原理四——代码优化

    代码优化 代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高...

  • 【持续更新】Java代码优化总结

    代码优化的目标: 1. 减小代码体积 2. 增强代码可读性 3. 提升代码执行效率

  • 代码优化和效率提升的方法(三)++$i和$i++的效率对比

    在一般我们执行循环操作的时候,都会采用自增变量(++)或自减变量(--)的方式来进行。i的不同之处,在我们初学程序...

  • java代码性能优化总结

    代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 代码优化细节 (1)尽量指定类、方法的final修...

  • java代码优化与运行性能总结

    代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰...

  • 优化打包阶段提效

    代码优化到⽣成产物阶段的效率提升,这⼀阶段的优化可以分为两个不同的⽅向: 针对某些任务,使⽤效率更⾼的⼯具或配置项...

网友评论

    本文标题:代码优化和效率提升的方法(四)多出的4M内存哪儿去了?

    本文链接:https://www.haomeiwen.com/subject/eplvkhtx.html