博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于内存的划分和传引用传参数的区别
阅读量:5317 次
发布时间:2019-06-14

本文共 830 字,大约阅读时间需要 2 分钟。

1.堆

2.栈 空间较小

3.全局

4.代码段

要搞懂每个区域放什么东西

 

 

堆 复杂类型
栈 变量
静 
复杂类型对象没有指针指的时候,堆中的内容垃圾回收
1
函数传对象的时候,其实是首先在堆里面开一个内存放对象属性内容,在栈里面开一个内存放一个变量,变量里面放地址,指向堆的那个对象,传对象的时候,是在栈里面再开一个内存,里面的内容是刚才那个指向对象的栈变量的地址,也是指向堆的那个对象,函数返回的时候,这个赋值过来的指针断开。在函数里面的修改也会对原来对象产生变化。
2
而传引用对象进去的时候,用的还是原来那个栈的指向堆对象的地址变量,所以,出来的时候也会发生改变。
3
php可以传对象进函数中去,然后在函数里面把对象赋值成整形变量,这时候,过程是,在栈里面开一个内存放地址变量,这个地址常用也是传参时栈里面指向堆对象的那个地址变量赋值过来的,然后把新的那个指向堆对象的地址变量赋值成整数,就是原来的地址变成了整数,这时候它和堆对象的连接就断开了,等函数返回的时候,原对象没有任何变化
4
php传引用对象进去的时候,然后在函数里面把对象赋值成整数变量,这时候,过程是,原来指向堆对象的地址变量变成整数,指向堆对象的连接断开,然后原来的堆对象由于没有任何指针指向它就垃圾回收了,然后原来的那个对象引用变量就变成整数了。
new的时候就是在堆里面开一个内存,让栈里面的一个变量指向它,这个变量放地址
5
如果传函数参数是传对象进去,在函数里面用参数又new一个对象,过程是栈赋值一个地址变量,这个地址变量再自己new一个堆出来,函数返回时原来的对象不变
6
如果传函数参数是传引用对象进去,在函数里面用参数又new一个对象,过程是原来的那个栈地址变量自己又指向一个新的堆对象,原来那个对象被释放,返回时是新的函数里面改变的内容,但是不是原来那个对象了。 

转载于:https://www.cnblogs.com/HangZhe/p/7188375.html

你可能感兴趣的文章
Stack栈的基础实现
查看>>
java - 匿名类
查看>>
js----与浏览列表有关的对象(浏览器对象)
查看>>
css3 3D
查看>>
多比Web 3D展示(3D机房/3D监控)中间件多比Web 3D展示(3D机房/3D监控)中间件免费下载购买地址...
查看>>
心得9--jsp设计模版
查看>>
hibernate中的id特殊属性hilo剖解(多用于继承关系)
查看>>
HTTP与HTTPS区别(详细)
查看>>
城市统计【BFS】
查看>>
Eclipse设定文件的默认打开方式
查看>>
各种证书
查看>>
[老老实实学WCF] 第二篇 配置WCF
查看>>
war部署到tomcat
查看>>
指派问题(匈牙利算法)
查看>>
搬运 centos7.2 apache 绑定二级目录 访问依然是apache页面
查看>>
html 基础之canvas 和 localStorage
查看>>
C语言程序设计第三次作业
查看>>
MFC项目实战(1)文件管理器--准备篇
查看>>
解决ubuntu中vi不能正常使用方向键与退格键的问题
查看>>
HDFS常用操作命令
查看>>