php进阶(二)—php写时复制

  在php的内存管理中有一个很重要的概念就是写时复制(Copy on write),话不多说直接来代码

复制代码
<?php
$a = [];
$index = 0;
while(true){
        $a [] = rand(1, 100);
        if(++$index == 1000000){
break;
}
}
$b = $a;
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB";
复制代码

  首先定义一个10万随机数据的数组a,并定义一个变量b,使得b等于a,这时打印出内存占用情况,内存占用大约为34MB

 

 

   接下来见证奇迹的时刻,在上面的代码中加一行代码,随意修改b数组中的一个值

复制代码
<?php
$a = [];
$index = 0;
while(true){
        $a [] = rand(1, 100);
        if(++$index == 1000000){
break;
}
}
$b = $a;
$b[0] = 1000;
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB";
复制代码

  这时再查看内存占用情况,输出结果如下,内存为66MB,几乎是上面运行结果的两倍。

 

 

 

  从上面的代码示例,下面引出php写实复制的概念,

  写时复制的定义为:写时复制(Copy on Write,也缩写为COW)的应用场景非常多, 比如Linux中对进程复制中内存使用的优化,在各种编程语言中,如C++的STL等等中均有类似的应用。 COW是常用的优化手段,可以归类于:资源延迟分配。只有在真正需要使用资源时才占用资源, 写时复制通常能减少资源的占用。

  PHP中的COW可以简单描述为:如果通过赋值的方式赋值给变量时不会申请新内存来存放 新变量所保存的值,而是简单的通过一个计数器来共用内存,只有在其中的一个引用指向变量的 值发生变化时才申请新空间来保存值内容以减少对内存的占用。 在很多场景下PHP都COW进行内存的优化。比如:变量的多次赋值、函数参数传递,并在函数体内修改实参等。   

 

posted on   1450811640  阅读(133)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示