php变量内部实现

typedef union _zvalue_value {
    longlval;                  /* long value */doubledval;                /* double value */struct {
        char *val;
        intlen;
    } str;
    HashTable *ht;              /* hash table value */zend_object_valueobj;
} zvalue_value;
//a union is simply a single type that can be interpreted in different ways depending on how its accessed.

//联合体仅仅代表一种可以解释为多种实际类型的抽象类型,但是每次必须解释为一种实际的类型


1、union中可以定义多个成员,union的大小由最大的成员的大小决定。 2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。 3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)

4、联合体union的存放顺序是所有成员都从低地址开始存放的。
//最大为96bits,所以联合体的内存大小为96bits
从上面可以看出,

_zvalue_value只能直接表示五种类型,其他的类型需要进行转换。
BOOL,NULL,RESOURCE都存储为long(int)。
typedef struct _zval_structzval;
struct_zval_struct {
    /* Variable information */
    zvalue_value value;     /* value */
    zend_uintrefcount__gc;  //引用计数
    zend_uchartype;    /* active type */
    zend_ucharis_ref__gc;    //标识是否是引用
};
获取zval结构的类型
Z_TYPE(zval)
获取zval结构的值
Z_LVAL(zval)    //获取整型值
Z_DVAL(zval)    //获取浮点数

如:

#define Z_LVAL(zval)            (zval).value.lval

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 15:18:04

php变量内部实现的相关文章

谢烟客---------Linux之Bash基础特性变量(3)

变量 程序 = 指令(只读) + 数据(数据存储的位置变量.列表.数组) 指令可通过位置变量调用,向脚本传递的数据 变量名 可引用的"命名的内存空间":取了名字的内存空间,用名字即可调用事先划分的内存空间 变量类型 变量内部存储的数据的类型 变量类型的作用 限定了存储空间 限定了存储格式 限定了参与的运算 变量的类型 字符型 数值型 整型 浮点型 变量的类型 强类型 定义变量时,必须指定变量的类型,参与的运算必须符合要求 调用未申明的变量,会报错 弱类型 定义变量时,不用指定变量的类型

C++程序中不同变量、函数在内存中内存中的分布情况

一.一个C++编译的程序占用的内存分为以下几个部分 1.栈区:由编译器自动分配 存放函数的参数值,局部变量的值等,操作方式类似于数据结构中的栈. 2.堆区:一般由程序员分配释放,若程序员不释放,程序结束时 可能 有系统收回.它与数据结构中的堆是两回事.分配方式类似于链表. 3.全局区(静态区):全局变量和静态变量是存储放在一块的,初始化的全局变量和静态变量在一个区域,未初始化的在相邻的另一个区域. 程序结束后由系统释放. 4.文字常量区:常量字符串就存放在这里.程序结束后有系统自动释放. 5.程

(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项. 和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励

【学习笔记】【C语言】static和extern对变量的作用

 1.全局变量分2种: 外部变量:定义的变量能被本文件和其他文件访问 1> 默认情况下,所有的全局变量都是外部变量 1> 不同文件中的同名外部变量,都代表着同一个变量  内部变量:定义的变量只能被本文件访问,不能被其他文件访问 1> 不同文件中的同名内部变量,互不影响  static对变量的作用: 定义一个内部变量  extern对变量的作用: 声明一个外部变量  static对函数的作用: 定义和声明一个内部函数  extern对函数的作用: 定义和声明一个外部函数(可以省略) 2.代

python变量内存浅析

1. Python变量 如果把单一值变量称为一维变量,把可以扩展元素的变量称为多维变量,则python的变量可以划分如下: 变量维度 Python变量 说明 一维 数字 int(有符号整型) 数字类型可以做转换 long(长整型[也可以代表八进制和十六进制]) float(浮点型) complex(复数) 字符串 字符串有丰富的运算符和内嵌函数: 有格式化输出: 二维 列表 除了元祖外,列表和字典可以灵活的扩展元素 元组 字典 2. Python变量的赋值处理 这里主要分析情况为,将原始变量赋值

深入PHP变量存储结构 标签: PHP存储

1.深入PHP变量存储结构 标签: PHP存储  分类: 编程语言(10)  首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如果你想对PHP变量存储结构有一个了解或想对PHP变量加深理解的话,本文是适合你的,比较深入的去看源代码吧. 为了保证博客的连贯性,首先引用laruence关于PHP变量内部存储结构的部分内容(稍作修改) 在PHP中,所有的

python变量、引用、拷贝之间的关系

Python中一切皆为对象,不管是集合变量还是数值型or字符串型的变量都是一个引用,都指向对应内存空间中的对象. 简而言之: 变量直接赋值:新变量本身及其内部的元素都与原变量指向相同的内存空间,并且值相同,当一个发生变化时,另一个也随之变化. 变量浅拷贝:新变量本身与原变量指向不同的内存空间,但是新变量内部的元素与原变量指向相同的内存空间:当改变原变量内部的可变对象的值时,新变量内部的值也发生随之变化:改变原变量内部的不可变对象的值时,新变量内部的值不随之变化:反之亦然(即改变新变量时). 变量

PHP变量存储结构

首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如果你想对PHP变量存储结构有一个了解或想对PHP变量加深理解的话,本文是适合你的,比较深入的去看源代码吧. 为了保证博客的连贯性,首先引用laruence关于PHP变量内部存储结构的部分内容(稍作修改) 在PHP中,所有的变量都是用一个结构-zval来保存的, 在Zend/zend.h中我们可以看到

AxureRP7.0基础教程系列 部件详解 Inline Frame 内部框架

原型库网站-讲师金乌原创发布,可自由转载,请注明出处! Axure中文官网:www.AxureRP.cn   <AxureRP7.0部件详解> Inline Frame 内部框架 使用内部框架,可以嵌入视频,地图,和HTML到您的原型设计中.使用案例 模拟移动体验 使用手机外壳部件,并在手机外壳的内容区域添加内部框架,内部框架可以签入其他页面或站外链接并显示在手机外壳的屏幕上.这样可以在你的电脑上实现模拟移动设备的体验. 签入外部内容 外部的HTML文件.视频.地图等内容都可以签入到内部框架中