对像在PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明 放在不同的内存段里面。

  数据段(data segment)通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量          

  代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域,比如函数和方法

  栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。

  那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存 的那个段里面呢?这样的数据是放在堆内存里面的。如下图:

栈内存是可以直接存取的,而堆内存是 不可以直接存取的内存。对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。$p1 就是我们实例出来的对象名称,同理,$p2,$p3 也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来3 个人来,每个人之间是没有联系的,只能说明他们都是人类,每 个人都有自己的姓名,性别和年龄的属性,每个人都有说话和走路的方法,只要是类里面体 现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。

$p1=new Person();

对于这个条代码,$p1 是对象名称在栈内存里面new Person()是真正的对象是在堆内存 里面的,具体的请看下图:

从上图可以看出$p1=new Person();等号右边是真正的对象实例,在堆内存里面的实体, 上图一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,每个对象之间都是相互独立的,使用自己的空间,在PHP 里面,只要有一个new 这个关键字出现就会 实例化出来一个对象,在堆里面开辟一块自己的空间。 每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓 名、性别和年龄。每个属性又都有一个地址。 $p1=new Person();等号的右边$p1 是一个引用变量,通过赋值运算符“=”把对象的首地址 赋给“$p1”这个引用变量,所以$p1 是存储对象首地址的变量,$p1 放在栈内存里边,$p1 相当 于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也 称对象引用为对象。

原文地址:http://www.cnblogs.com/mo-beifeng/archive/2011/10/08/2201685.html

转载于:https://www.cnblogs.com/hongfei/archive/2012/06/12/2547120.html

【转】PHP对象在内存中的分配相关推荐

  1. python里面的类和对象_Python中类和对象在内存中是如何保存?

    类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...

  2. JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配

    文章目录 前言 零.排序规范 1.happens-before原则 2.找文档位置 一.一线互联网企业关于对象面试题: (后面回答的就是这几个问题) 二.对象创建过程 三.对象在内存中的存储布局 1. ...

  3. [转载] java对象在内存中的结构

    参考链接: 了解Java中的类和对象 今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32 ...

  4. Java数组在内存中的分配

    Java数组在内存中的分配 在Java中,数组存储对象的原始值(int,char,...)或引用(也称为指针). 使用"new"创建对象时,会在堆中分配一个内存空间并返回一个引用. ...

  5. 实现 对象在内存中的引用一致性 之第一步

    原委 废话不要,他们都该删. 虽然写了个 基于数据库的代码生成器 与大家分享,但并不擅长数据库开发:相反,面向对象才是我的爱. 多年的酝酿让我收获良多,直觉这是个令人激动的开发模式. 或许是因为高中学 ...

  6. 对象在内存中的存储布局

    对象头包含: markword(和锁相关的信息)  8字节 class pointer(说明对象属于哪个类),jvm指针八字节,但是默认压缩,所有4个字节 对象体包含: instance word实例 ...

  7. 单个对象和多个对象在内存中的结构图

    单个对象在内存中的结构图: 多个对象在内存中的结构图: (注:图片来至http://www.itheima.com/ 视频教程截图,转载请说明出处)

  8. java对象的内存结构_Java对象在内存中的结构分析

    问题:在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头.实例数据和对齐填充,其中对象头又分为:Mark ...

  9. Bitmap对象在内存中的大小和转化为字节流的大小

    查看我的博客原文:Android – Bitmap 内存管理 Bitmap对象在内存中的大小 比如我们构造Bitmap时设置宽200,高400,色彩模式为Bitmap.Config.ARGB_8888 ...

最新文章

  1. 用人铁律:高层看胸怀、中层看德行、基层看才能
  2. 【LeetCode】two num 利用comparable接口 对对象进行排序
  3. c++ 判断nil_golang A=nil,B=A,but B!=nil 这是真的
  4. windwos -- bat脚本
  5. 究竟是“二O一六年”还是“二零一六年”?嘴上会说可你会写吗?
  6. ccs船级社认证费用多少_亚马逊UL507认证是什么?办理费用是多少?
  7. debug ERP initial load error
  8. activemq生产者和消费者的双向通信
  9. 配置yml_dctc:生成docker-compose.yml配置的工具
  10. php怎么分割页面,将一个页面分成多个html文件(静态html分割页面)
  11. 云在天之南——我的七天七夜(率性苍山洱海)
  12. FusionCharts参数说明——3D饼图属性(Pie3D.swf )
  13. 上游供应链厂商确认高通已获准向华为出售4G芯片
  14. 程序员专属段子集锦 6/10
  15. 开发日记(01) - uni-app 使用等宽字体对齐数字宽度
  16. epcs1s是epcs1系列的么_fpga的EPCS 配置的2种方法 FPGA下载程序的方法(EPCS)
  17. uni-app 创建新页面和页面的配置
  18. 三菱FX3Uplc控制的三轴程序通用编程,程序带有注解,有原点回归,机器手加减速设置
  19. payjs 源码_WordPress插件:Payjs For Ponits基于Payjs开发的积分充值微信支付插件
  20. C# 把汉字转换成拼音(全拼)

热门文章

  1. slf4j没有在linux中生成日志,logback+SLF4J 没打印日志
  2. 英文教材《FPGA-Prototyping-By-Verilog-Examples》下载
  3. uos系统终端调试linux命令,uos怎么开启开发者模式
  4. GIS之旅——研究生总结
  5. 解决打包AssetBundle时Shader(材质)丢失问题
  6. 电脑桌面点任何文件都打开计算机,小编教你电脑开机自动打开文件夹怎么解决...
  7. CentOs7配置java环境
  8. Spark SQL将rdd转换为数据集-反射来推断Inferring the Schema Using Reflection
  9. python 去掉双引号_python知识学习,python标识符和关键字
  10. 特征提取与检测(四) : HOG特征