| |
 
  |  
 
| 
	
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/4 21:38:27- | 
  |  
 
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |