关于内存的划分和传引用传参数的区别
1.堆
2.栈 空间较小
3.全局
4.代码段
要搞懂每个区域放什么东西
栈 变量
静
代
复杂类型对象没有指针指的时候,堆中的内容垃圾回收
1
函数传对象的时候,其实是首先在堆里面开一个内存放对象属性内容,在栈里面开一个内存放一个变量,变量里面放地址,指向堆的那个对象,传对象的时候,是在栈里面再开一个内存,里面的内容是刚才那个指向对象的栈变量的地址,也是指向堆的那个对象,函数返回的时候,这个赋值过来的指针断开。在函数里面的修改也会对原来对象产生变化。
2
而传引用对象进去的时候,用的还是原来那个栈的指向堆对象的地址变量,所以,出来的时候也会发生改变。
3
php可以传对象进函数中去,然后在函数里面把对象赋值成整形变量,这时候,过程是,在栈里面开一个内存放地址变量,这个地址常用也是传参时栈里面指向堆对象的那个地址变量赋值过来的,然后把新的那个指向堆对象的地址变量赋值成整数,就是原来的地址变成了整数,这时候它和堆对象的连接就断开了,等函数返回的时候,原对象没有任何变化
4
php传引用对象进去的时候,然后在函数里面把对象赋值成整数变量,这时候,过程是,原来指向堆对象的地址变量变成整数,指向堆对象的连接断开,然后原来的堆对象由于没有任何指针指向它就垃圾回收了,然后原来的那个对象引用变量就变成整数了。
new的时候就是在堆里面开一个内存,让栈里面的一个变量指向它,这个变量放地址
5
如果传函数参数是传对象进去,在函数里面用参数又new一个对象,过程是栈赋值一个地址变量,这个地址变量再自己new一个堆出来,函数返回时原来的对象不变
6
如果传函数参数是传引用对象进去,在函数里面用参数又new一个对象,过程是原来的那个栈地址变量自己又指向一个新的堆对象,原来那个对象被释放,返回时是新的函数里面改变的内容,但是不是原来那个对象了。
转载于:https://www.cnblogs.com/HangZhe/p/7188375.html
关于内存的划分和传引用传参数的区别相关推荐
- 2021-01-14python函数传参是传值还是传引用? 参数若是简单类型是传值 若是对象类型则是传引用,python是兼容两者传参方式的
python函数传参是传值还是传引用? 首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题. ...
- C++中的参数传递方式:传值、传地址、传引用总结
指针:指针是一个变量,只不过这个变量中存储的是一个地址,指向内存中的一个单元. 引用:引用和原变量是同一个东西,只不过是原变量的一个别名. int a = 10; 定义一个整型变量aint *p = ...
- 【Qt】信号和槽对值传递参数和引用传递参数的总结
在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...
- qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...
在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...
- 传值类型_Java内存管理:Stackoverflow问答-Java是传值还是传引用(十一)
勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题 ...
- Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...
- C++ 函数参数传递:传值,传指针,传引用
PS:首先理解形参 实参概念.形参是在函数定义的括号内定义的专用变量,它们的目的是保存按实参传递给它们的信息,实参被列在函数调用语句的括号内. int func(int x)//x是形参 {ret ...
- JAVA中是传值还是传引用?回答KEZHANG问题
首先,推荐对Java有一定理解的同仁一本书<Practical Java>.在<Practical Java>中也有一个章节介绍Java中关于传值和传引用的问题,堪称经典. & ...
- golang 传值 传引用 简介
目录 1. 基础类型 2. struct 3. 函数 4. slice 5. map 6. chan 7. 总结 1. 基础类型 byte,int,bool,string,float,数组等均是传值. ...
最新文章
- 重装系统最关键一步:如何做好备份
- 08-GCD常用方法
- hql 字符串where语句_Hibernate HQL基础 限定查询条件
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
- iOS真机UI调试利器——Reveal
- nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务...
- eclipse多余的Workspace如何删除
- 基于ssm java jsp的酒店管理系统 前后台
- BeetlSQL 注解
- win10怎么更新显卡驱动_AMD Radeon 20.5.1 驱动程序更新:新增支持 Win10 版本 2004
- 现金流量表编制(经典总结)
- 消息称聊天宝团队解散 罗永浩已经退出股东行列
- 数据库连接驱动介绍及参数简单设置
- 15.模拟e^x的麦克劳林展开式
- XV6源代码阅读-虚拟内存管理
- 最适合家用的洗地机哪个牌子好?家用洗地机品牌排行榜
- 电脑端使用文件微信聊天记录的本机/新机备份迁移
- vi vim 快速跳到文件末尾 GA 在最后一行下方新增一行 (光标换行,文字不换行) GO
- Apollo + Springboot 整合(多环境版)
- 如何将SVN上的版本回滚到旧版本
热门文章
- 镭波笔记本安装linux,镭波笔记本windows7旗舰版系统下载与安装教程
- ctr z撤回反向_matplotlib 3D图上的反向Z轴
- java 类调用情况_java 如何调用类?情况如下
- 听力阈值计算_中耳功能分析:临床听力测试的重要手段!
- 数据库:MySQL 团队开发规范,太详细了,建议收藏!
- 操作系统:提升电脑开机速度的15个小技巧
- 软件:常用 Linux 软件汇总,值得收藏!
- Java技术:Optional 相关用法介绍笔记
- 计算机基础:多媒体基础知识笔记
- python替换所有标点符号 正则_python 把标点符号替换为空