在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
PHP使用引用计数和写时复制来管理内存。写时复制保证了变量间复制值不浪费内存,引用计数保证了当变量不再需要时,将内存释放给操作系统。 要理解PHP内存管理,首先要理解一个概念----符号表。 符号表的概念: 一个变量有两部分组成:变量名和变量值。而符号表就是将变量名映射到内存中变量值所在地址的数组。 写时复制: 当一个变量的值复制到另一个变量时,PHP没有为复制值使用更多的内存。相反,他会跟新符号表来说明这两个变量拥有相同的内存块。所以下面的代码实际上并没有创建新数组: <?php $people = array( "Alice","Bob" ); $other = $people; //数组并没有被复制 ?> 如果修改任何一个副本,PHP将分配所需的内存来进行复制: $people[ 1 ] = "Tom"; //值改变,数组被复制,分配新的内存 通过延迟分配和复制,PHP在很多情形下节省了时间和内存,这就是写时复制。 引用计数: 符号表中没哟个职都有一个引用计数器,,它的值表示获取那片内存的方式的数目。 在给$people和$other初始化赋值后,数组指向符号表,$people和$other引用计数器的值为2.换句话说,那一片内存有两种方式可以得到:$people和$other。 但是当$people[ 1 ]的只改变之后,PHP为$people创建一个新的数组,这时,$people和$other的引用计数器的值都为1.当一个变量离开作用域,如函数参数和局部变量到达函数末尾时,应用计数器的值减去1.当一个变量在其他内存空间被赋值时,旧值得引用计数减1。当引用计数的值为0时,他的内存被释放。 这就是引用计数。 引用计数是首选的内存管理方式。保持变量作用域限制于函数中,通过值来传递,并让引用计数负责内存管理。如果你想主动获得更多的信息或者控制权来释放一个变量的值,可以使用isset()和unset()函数。 |
2022-11-06
2022-08-15
2022-07-18
2022-08-17
2022-08-17
请发表评论