关于内存的划分和传引用传参数的区别

1.堆

2.栈 空间较小

3.全局

4.代码段

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

 

 

堆 复杂类型
栈 变量
静 


复杂类型对象没有指针指的时候,堆中的内容垃圾回收

1
函数传对象的时候,其实是首先在堆里面开一个内存放对象属性内容,在栈里面开一个内存放一个变量,变量里面放地址,指向堆的那个对象,传对象的时候,是在栈里面再开一个内存,里面的内容是刚才那个指向对象的栈变量的地址,也是指向堆的那个对象,函数返回的时候,这个赋值过来的指针断开。在函数里面的修改也会对原来对象产生变化。

2
而传引用对象进去的时候,用的还是原来那个栈的指向堆对象的地址变量,所以,出来的时候也会发生改变。

3
php可以传对象进函数中去,然后在函数里面把对象赋值成整形变量,这时候,过程是,在栈里面开一个内存放地址变量,这个地址常用也是传参时栈里面指向堆对象的那个地址变量赋值过来的,然后把新的那个指向堆对象的地址变量赋值成整数,就是原来的地址变成了整数,这时候它和堆对象的连接就断开了,等函数返回的时候,原对象没有任何变化

4
php传引用对象进去的时候,然后在函数里面把对象赋值成整数变量,这时候,过程是,原来指向堆对象的地址变量变成整数,指向堆对象的连接断开,然后原来的堆对象由于没有任何指针指向它就垃圾回收了,然后原来的那个对象引用变量就变成整数了。
new的时候就是在堆里面开一个内存,让栈里面的一个变量指向它,这个变量放地址

5
如果传函数参数是传对象进去,在函数里面用参数又new一个对象,过程是栈赋值一个地址变量,这个地址变量再自己new一个堆出来,函数返回时原来的对象不变

6
如果传函数参数是传引用对象进去,在函数里面用参数又new一个对象,过程是原来的那个栈地址变量自己又指向一个新的堆对象,原来那个对象被释放,返回时是新的函数里面改变的内容,但是不是原来那个对象了。 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net CoreRabbitMQ消息存储可靠机制(下)

前言上篇讨论过消息投递和消息消费过程中如何确保可靠传输,也提及到消息到达RabbitMQ中到被消费前也需要可靠的留存,可因许多的不确定因素会影响着消息的存在与否。消息中转点生产者发送消息到RabbitMQ中,如果交换机根据自身类型和RoutingKey…

nginx安装及负载均衡配置

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发…

java怎么获取该项目系统的参数_Java 获取系统参数

Java 获取系统参数2014/5/22 12:57:44 a920829018 程序员俱乐部 我要评论(0)摘要:通过System.getProperties()获取系统参数PropertiespropsSystem.getProperties();//系统属性System.out.println("Java的运行环境版本:"props.getProperty(&…

智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资

日前,国内第一智能停车平台“ETCP停车”宣布完毕A轮融资,由源代码资本、SIG、易车网、经纬中国和商企界知名人士联合投资超过5000万美金。同一时候获悉,ETCP作为中国智能停车行业龙头老大,不仅是该行业的创建者和领军品牌&#xf…

没有人会觉得正则表达式难写

1. RegExp对象 JavaScript有两种方式实例化RegExp对象 字面量构造函数字面量 const reg /all/; console.log(reg); // /all/ This is all I have..replace(reg, ALL); // This is ALL I have. 复制代码构造函数 const reg new RegExp(all); console.log(reg); // /all…

ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素

阅读目录 Bootstrap 栅格(Grid)系统Bootstrap HTML元素Bootstrap 验证样式ASP.NET MVC创建包含Bootstrap样式编辑模板小结Bootstrap提供了一套丰富CSS设置、HTML元素以及高级的栅格系统来帮助开发人员快速布局网页。所有的CSS样式和HTML元素与移动设备优…

sublime-text3按tab跳出括号

功能 通过按tab自动跳过右括号,右引号,虽然也可以按右方向键,但离得太远按起来太麻烦 在首选项->按键绑定里添加: { "keys": ["tab"], "command": "move", "args": {"by": "characters", "forw…

VS2017调试闪退之Chrome

原文:VS2017调试闪退之Chrome巨硬build后发了15.7.1满载期待的升级了。。结果NM泪奔................... 为啥 泪奔? 使用Chrome 调试闪退,MMP ,一想肯定是VS的锅咯,各种抓头发。。 试试看看VS配置发现 ,多了点东西。。 都勾上后&…

python中的threading_关于Python中的线程,之,threading,初探

threading库主要用于基于线程的并行,核心就是Thread类class threading.Thread(groupNone, targetNone, nameNone, args(), kwargs{}, *, daemonNone)并行是什么就不谈了,用threading的主要目的就是为了实现多个任务的并行,比如WiFi throughpu…

ios UISearchBar搜索框的基本使用

摘要: 小巧简洁的原生搜索框,漂亮而易用,如果我们的应用没有特殊需求,都可以使用它。iOS中UISearchBar(搜索框)使用总结 初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar UISearchBar * bar [[U…

Win8下怎样安装Win7 or Win7下怎样安装win8?

预计非常多人可能会用U盘安装工具去去做双系统的安装(Win8下安装Win7, Win7下安装Win8)。可是在安装过程中你 会发现一个问题:win7下安装win8,提示你mbr硬盘格式不能安装win8;win8下安装win7,提…

Linux 练习题-3文件与磁盘 问答

1、描述Liux下软链接和硬链接的区别创建命令不同,ln 命令创建硬链接,ln -s 创建软链接inode节点号不同,硬链接inode与源文件相同,软链接inode与源文件不同使用对象不同,硬链接只能对文件使用,软链接可以对文…

.NET Offer 快到碗里来!.NET 招聘季

关注我们谈到 .NET 在中国的推广和发展,.NET 开发者求职就业及 .NET 企业招人用人的问题往往常被提及。初学者会担心学习 .NET 之后的就业问题,.NET 开发者在求职过程中没有足够多的渠道来获取 .NET 招聘信息,而与此同时,采用 .NE…

java的collections_Java中Collection和Collections的区别

1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的1 List list new ArrayList();2 int array[] {112, 111, 23, 456, 231};3 for (int i 0; …

jQuery事件绑定(一)

2019独角兽企业重金招聘Python工程师标准>>> 一、on方法 在Jquery1.7中添加,用来代替其他事件绑定方法。向匹配元素添加一个或多个事件处理程序 使用语法: $(selector).on(event,childselector,data,function) 参数: event&#x…

JDBC学习笔记之JDBC简介

1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据。 JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据库;2.发送查询和更新语句到数据库;3.检索并处理从数…

PaddleOCR在 windows下的webAPI部署方案

很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了。本文将介绍一种基于python的PaddleOCR识方案。喜欢的可以关注公众号,获取更多内容。# 一、 windows环境下部署###1.环境操作系统:windows10;主要软件环…

Vim的NerdTree插件

一个项目文件多起来时,左边的文件树菜单是必要的。参考:常用文件树快捷键所有命令及推荐键盘映射:官方 在vundle插件管理的方式,直接在~/.vimrc中的Plugin段落中加入Plugin "scrooloose/nerdtree"然后重启Vim并输入Plug…

java简单投票系统_JSP实现的简单Web投票程序代码

本文实例讲述了JSP实现的简单Web投票程序。分享给大家供大家参考。具体如下:这里使用文本文件作为数据存储的投票系统。1. vote.java:package vote;import java.io.*;import java.util.*;public class vote {public String filePath "";publi…

LeetCode139:Word Break

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s “leetcode”, dict [“leet”, “code”]. Return true because “leetcode” can be segm…