php内核为变量的值分配内存的几个宏
在php5.3之前,为某变量分配内存是用宏 MAKE_STD_ZVAL;
737 #define MAKE_STD_ZVAL(zv) \   # /Zend/zend.h
738     ALLOC_ZVAL(zv); \
739     INIT_PZVAL(zv);
165 #define ALLOC_ZVAL(z) \      # /Zend/zend_alloc.h
166     (z) = (zval *) emalloc(sizeof(zval))
727 #define INIT_PZVAL(z) \              # /Zend/zend.h
728     (z)->refcount__gc = 1;  \
729     (z)->is_ref__gc = 0;
php5.3以及php5.4之后 还是用宏 MAKE_STD_ZVAL; 但是 ALLOC_ZVAL 里面有了新的实现,是因为php5.3新的GC(垃圾回收机制)
#undef 是在后面取消以前定义的宏定义
/* The following macroses override macroses from zend_alloc.h */
203 #undef  ALLOC_ZVAL
204 #define ALLOC_ZVAL(z)                                   \
205     do {                                                \
206         (z) = (zval*)emalloc(sizeof(zval_gc_info));     \
207         GC_ZVAL_INIT(z);                                \
208     } while (0)
63 #define GC_ZVAL_INIT(z) \ 
 64     ((zval_gc_info*)(z))->u.buffered = NULL
至于为什么这样做,在 php5.3新的垃圾回收机制详解 中有详细的介绍
php内核为变量的值分配内存的几个宏的更多相关文章
- linux设备驱动归纳总结(五):1.在内核空间分配内存【转】
		本文转载自:http://blog.chinaunix.net/uid-25014876-id-79134.html linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxx ... 
- 【Linux开发】linux设备驱动归纳总结(五):1.在内核空间分配内存
		linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ... 
- c++对c的扩展----什么时候分配内存
		const分配内存的时机,编译器编译的时候分配内存 const相当于宏,用来取代c语言的#define #include<iostream> using namespace std; vo ... 
- delphi 给字符指针分配内存
		今天,对接第三方dll的时候出现如下问题: 接口声明如下: long BL_tradeBalance (char *MerchantNumber,char *PosId,char *OperatorN ... 
- linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁【转】
		转自:http://blog.csdn.net/goodluckwhh/article/details/9005585 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一每 ... 
- .NET的堆和栈01,基本概念、值类型内存分配
		当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出 ... 
- 《PHP内核剖析 - 变量/内存管理》
		本文总结自: <PHP7 内核剖析 - 变量的内部实现> 一:变量的实现 - 变量是一个语言实现的基础. - 在PHP中,变量的组成部分为 变量名(zval) 变量值(zend_value ... 
- Linux内存管理 —— 内核态和用户态的内存分配方式
		1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述.所有zone都是通过buddy系统管理的,buddy ... 
- DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?
		DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?比如我定义个变量 var p:Pchar;如果这个变量声明为全局变量,需要分配内存吗?分配为局部变量,需要分为内存吗?为什么 ... 
随机推荐
- JavaScript 静态方法和实例方法
			总结: 直接定义在构造函数上的方法和属性是静态的, 定义在构造函数的原型和实例上的方法和属性是非静态的 静态方法: function ClassA(){ //定义构造函数 }; ClassA.fun ... 
- 实现KbmMw web server 支持https
			在以前的文章里面介绍过kbmmw 做web server. 前几天红鱼儿非要我给他做一个支持https 的web server. 其实kbmmw 支持https 有好几种方法: 1. 使用isapi ... 
- jquery ajax请求方式与提示用户正在处理请稍等
			为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实现 初次使用$.ajax() ,我没有去区分过ajax的异步 ... 
- 使用LVM对系统盘进行扩容
			不知道大家有没有碰到在安装CentOS时个,对系统每个挂载点分配多大容量比较合适的问题?如果挂载点容量分配大小,在某天不够用的时候怎么办:分配太大又存在浪费的情况.特别是在遇到系统盘特别小的时 ... 
- hdu 2845 Beans                                                                                            2016-09-12 17:17             23人阅读              评论(0)              收藏
			Beans Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ... 
- android Qzone的App热补丁热修复技术
			转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ... 
- hdu 5067 遍历指定点集最小时间
			http://acm.hdu.edu.cn/showproblem.php?pid=5067 贴题解 由于Harry的dig machine是无限大的,而装载石头和卸载石头是不费时间的,所以问题可以转 ... 
- 结对编程--四则运算(Java)梅进鹏 欧思良
			结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ... 
- 关于ListBox的几个问题
			Winfrom ListBox绑定数据源list界面不更新问题与绑定数据源不可CRUD问题 场景:获取一个listbox的选中项添加到另一个listbox中 解决方案-1:不要直接绑定DataSour ... 
- Tempdb--关于表变量的一点疑问和测试
			在思考表变量与临时表之间区别时,表变量不会受事务回滚的影响,那么是否意味着表变量无需写入日志呢? 测试方式: 分别对tempdb上的用户表/临时表/表变量 进行10000次插入,查看日志写入次数,使用 ... 
