| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> php源码02 -基本变量与内存管理机制 -> 正文阅读 |
|
[PHP知识库]php源码02 -基本变量与内存管理机制 |
概述这是源码php7系列的第二篇文章,主要介绍变量的机制和内存的管理,我相信学习源码是对代码整体提升的有效手段,话不多说,开始吧! 变量实现1. 解密zval zval 底层结构:
对于vue来说是一个联合体,zval一共16个字节,u1 4个字节,u2四个字节,value结构体如下:
虽然PHP属于弱类型语言,但是在底层实现中还是要区分类型的,因为类型里有天然的长度,类型引势内存的长度。 底层做了很多类型转化的处理,让我们不用关心php的类型和长度,这也是php开发高效的原因之一。 变量知识点:
2.写时复制(Copy On Write)
zend_refcounted_h 作用是string类型的引用计数的结构体,h是字符串对应的hash值,它后面会用到数组里,len代表字符串的长度,char是字符串的值,因为C言语中字符串遇到\0就会自动结束,二进制是不安全的,所以php加上了长度。
php的写时复制是这样发生的,如果把 v a l u e 1 赋 值 给 value1赋值给 value1赋值给value2,两个变量指向的是同一个物理内存地址,存在硬盘上的某一个块里,也许地址是0x7fff5e01c00,当$value2赋值新的值时,zend_refcounted_h引用计数减一,zcc存入新的地址。可以看我之前的文章。 3.字符串的引用类型
可以跟着代码执行一下,看看你心里的预期和实际打印出的值是否一致
执行结果:
源码中的数组HashTable
nTableMask是计算数组的索引值,*arData存储数组里的key=>value的键值对,nNumUsed表示已经使用的空间,nNumOfElements真正的元素个数,nTableSize是arData的大小,nTableSize默认大小是8字节,内存不够每次扩容都x2,以此类推。 内存管理在malloc申请内存时声明了size大小,但是回收时没有传size,怎么做到准确释放size大小内存的呢?
php7内存接口
1.Small内存的管理 内存的基本概念:chunk、page、各种规格的内存。
内存规格
内存分类:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbOuyCiU-1645874280990)(https://note.youdao.com/yws/res/16156/WEBRESOURCEd3870cc7b7e2858d7dbc5267989a84b5)] 2. Chunk的内存对齐 关于chunk对齐的算法
|
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 1:38:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |