zhang_jiafeng 2018-10-31 17:40 采纳率: 25%
浏览 705

为什么PHP7中数组初始化后,refcount=2?

注意,是PHP7(7.0.19)
代码:
$a=[];
xdebug_debug_zval('a');

结果:
a:

(refcount=2, is_ref=0)
array (size=0)
empty

  • 写回答

3条回答 默认 最新

  • Lei4Real 2018-11-02 00:10
    关注

    纠结这个没什么用的,平常又用不到

    评论
  • 转转兜兜哈 2018-11-05 18:00
    关注

    猜测,php原本就是有个固定的空数组,然后$a指向了该空数组,所以recount为2,如果$a做了修改的话,就会直接生成一个新的数组并开辟空间。
    因为空数组比较经常用到吧,如果每次开辟个空的,会浪费。纯属猜测。

    评论
  • 搬一口CV的砖 2018-12-02 04:58
    关注

    这牵扯到 PHP7 中的另一个概念,叫做 immutable array (不可变数组),在不可变数组下,使用一个伪计数值2。类型是这种直接申明规定数组
    array(1,2,3)的refcount = 2 你可以看下 array("time"=>time())这样的申明,就是1。
    摘抄一段PHP7数组开发成员的一段原话,你可以看看。

    For arrays the not-refcounted variant is called an "immutable array". If you use opcache, then constant array literals in your code will be converted into immutable arrays. Once again, these live in shared memory and as such must not use refcounting. Immutable arrays have a dummy refcount of 2, as it allows us to optimize certain separation paths.

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥200 付费悬赏CF的CDN收费的配置方法
  • ¥15 中国json地图的点击事件
  • ¥15 前端是实现管道重叠效果
  • ¥15 WIN10批处理删除指定该文件夹下的所有文件和文件夹bat
  • ¥20 如何延长抓取实时信号的时间
  • ¥15 C# 一个项目中引用了两个外部dll,这两个dll平台不相同什么解决?
  • ¥200 webots中人形机器人调试
  • ¥15 关于#ios#的问题:我如何证明我的iPhone手机在一段时间里面是处于关机状态的
  • ¥15 关于波形反演中torch相关框架程序
  • ¥15 大恒水星相机SDK二次开发遇到的问题
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部