我对于调用对象和基本变量类型内存的运行机制理解

LabVIEW事件结构避坑指南:为什么你的‘确定按钮’事件有时会失灵? 本文深入探讨了LabVIEW事件结构中'确定按钮'事件失灵的常见原因及解决方案。从事件队列机制到事件类型选择,详细分析了事件丢失的五大原因,包括事件处理耗时过长、事件类型选择不当等,并提供了优化登录界面案例的实用建议。掌握这些技巧可显著提升LabVIEW用户界面的响应可靠性。 阅读详情

在学习php的过程中,才发现这么一个问题: 函数好对象的调用所产生的结果类型是不同的,或者说,在内存里面的操作是不同的,下面是我的php的实例代码:

        

<?php
class Classmate{	//【1】
		public $num1=1;
		public $num2=2;
		public $num3=3;
	}
	///如果参数是对象,那么传递的是对象的地址
	function change($obj){	//【2】
		$obj->num1=4;
		$obj->num2=5;
		$obj->num3=6;
	}
	$myobj = new Classmate();//【3】
	change($myobj);//【4】
	echo $myobj->num1.'<br/>'.$myobj->num2."<br/>".$myobj->num3.'<br/>';
?>

上面的结果是4,5,6;

这个过程是:在一开始第【1】:在堆区建立了一个含有三个变量的对象区域,系统分配给他们地址和值,下面是我做的内纯图:

做这个图的目的是说明: 在程序运行的一开始,这个内存就自然的建立起来了,然后我的总结就是,把对象分配到堆区,把函数分配到栈区。

那么就是说在栈区栈区传递给函数的是对象的地址,而不是数值,这里是和传递变量是不同的,后者是传递的值,那么就得来了,当在栈区的

函数里面对对象的成员属性进行操作是,就是直接指向堆区的对象,然后直接的具体操作,这个过程完成之后,函数结束,随之,它在内存里面

开辟的栈区也就随之销毁,不仅这里,所有的函数都是这个工作机制的,从而,这样完成了数字的修改。


但是,同时想一想,如果是函数对于基本类型的变量进行操作呢,为了说说明语言对于内存操作的一致性,下面第用C++写的一段简单代码:

#include <iostream>

using namespace std;

int jisuan(int x, int y, int z){
        x = 1;
        y = 2;
        z = 3;
        return x;
}
int main()
{
    int a = 4;
    int b = 5;
    int c = 6;
    jisuan(a, b, c);///使用完之后就销毁了
    cout << "在函数里面a的值为:" << jisuan(a,b,c) << endl;
    cout << a << " " << b << " " << c << endl;///在这里依然是原来的内存
}

说明一下:上面代码执行的结果是1,2,3;这样看起来就有点晕了,明明对变量进行修改了啊,为什么没有改变呢,经过学习,我才知道,也就是上面的一段话,就是当函数的参数是基本变量类型的时候,传递给函数的是他们的数值,这时并非地址,同样的,在系统分配的内存图可以这样解释,普通变量是建立在栈区的(起初的初始值就已经建立)

,当我们去调用函数的时候,在栈区,会建立一个对应函数的栈区,说白了就是把abc的值赋值给分配给函数栈区的对应变量,但是,当我们调用函数之后,同样的它的栈就随之的被销毁,自然就不会存在值得改变了,即便不销毁,也不会改变,那么就只剩下起初给的变量,所以,这个过程就不会改变



内存的机制是学习编译原理才会了解到的,但问题是,如果我不了解并学习它,对今后的php学习可定是比较模糊的,所以,至少应该做到了解,以上仅仅是我的理解,仅供参考,忘指正。

[Research Tips] 我的zotero文献管理方案: 云端同步+iPad批注+overleaf笔记 文献管理一直是一个很头疼的事. 最初直接在paper上做笔记, 后来尝试各种各样的文献管理软件, 比如endnote, mendeley等, 再后来直接用excel. 每一种方案都不是很满意. 最近尝试了各种软件, 摸索出一个合适自己的文献管理方案, 分享给大家. 我的需求: 支持PDF内全文搜索. 支持笔记搜索. 支持同步 可以批注PDF. 支持word内引用 支持Tex笔记语法 支持标签化管理 目前的方案除了第二个需求, 其他的都支持. 就目前我的经验来说, 除了知网研学可以搜索笔记外, 其他软件都 阅读详情

相关推荐

计算机图形学入门30:动画与模拟介绍

计算机图形学入门,动画与模拟,物理模拟,质点弹簧系统,运动学,粒子系统,动作捕捉。

YanisWu的博客 1484

JAVA 的成员变量和局部变量 以及初始化和内存运行机制

java的变量包括成员变量和局部变量 1**、成员变量和局部变量的简单概念** 成员变量: 实例变量(不以static修饰) 类变量(以static修饰) 局部变量: 形参(方法签名中的变量) 方法局部变量(在方法内定义) 代码块局部变量(在代码块中定义) 成员变量 类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同; 而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。 正是基于这个原因,可以把类

gym02的博客 614

微信本地数据解密实战:从AES加密原理到EnMicroMsg.db恢复指南

数据加密是保障信息安全的核心技术,其中对称加密算法AES因其高效可靠,被广泛应用于各类本地数据保护场景。其原理是通过特定密钥对数据进行混淆转换,确保未经授权者无法读取原始内容。在移动应用领域,本地数据库加密对于保护用户隐私、防止数据泄露具有重要价值。微信作为国民级应用,对其本地存储的聊天记录数据库(EnMicroMsg.db)采用了基于设备标识和用户UIN生成的AES-256-CBC加密方案。理解这一机制,不仅有助于在合法合规前提下进行个人数据备份与恢复,也为开发者进行客户端安全分析、兼容工具开发提供了基础

weixin_30764883的博客 565

深入理解Java运行机制:从编写代码到优化性能的全方位解析

Java是一种广泛使用的编程语言,以其平台独立性、强大的库支持和良好的安全性闻名。要真正理解Java的运行机制,需要从编写代码到程序执行的各个步骤进行详细探讨。本文将深入分析Java程序的编写、编译、类加载、执行、垃圾回收和性能优化等过程。

微笑听雨 1670

从零配置华为S5720交换机VLAN:Web界面与命令行双模式详解(附拓扑图)

本文详细解析华为S5720交换机VLAN配置的全过程,涵盖Web界面与命令行(CLI)双模式操作指南。从基础环境准备到多交换机环境配置同步,特别针对S5720-52X系列交换机的VLANif接口、端口分配策略及交换机堆叠技术进行深入讲解,并附实用拓扑图与配置示例,助力企业网络管理员高效完成VLAN部署。

happy2的博客 1367

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

qq_63539957的博客 2万+

内存分析理解

栈:存放基本变量类型(会包含这个基本类型的具体数值)(八大基本类型:byte,short,int,long,float,double,char,booelan) 引用对象的变量(会存放这个引用在堆里面的具体地址) int [] array;//声明是在栈中 堆:存放new的对象和数组 可以被所有的线程共享,不会存放别的对象引用 array = new int[10];//当new了新数组时,就进入了堆中 ...

weixin_43990260的博客 87

ubuntu 24.04安装ros1 noetic

上面是参考链接给的修改内容。除了上面要修改的地方,我在编译的生活还有一个地方报错,修改成如下形式。因为我已经对文件rosconsole_log4cxx.cpp作了上面的修改,所有是不是188行不太确认了,如果报“log4cxx::spi::LocationInfo”问题,按照下面修改就可以了。我在编译时还报了一个问题,就是我之前安装的是jazzy。所以在编译时会报ros变量名不对,这时对变量名做修改就可以了。具体怎么修改,百度。a、将源文件中所有CMakelist中编译标准改为c++ 17.

yangpan011的博客 3196

java运行机制中的堆栈_Java堆栈的理解

概述先Copy一个概念:JVM是基于堆栈的虚拟机。JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。例子分析堆是用来存储new出来的对象,也就是真实对象的存储地方。栈是用来存储基本变量、局部变量及对象的引用的。举个来说明吧class User {pr...

weixin_29898627的博客 182

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 440

【爬虫】Python实现爬取淘宝商品信息(超详细)

项目基于Python的第三方库Selenium模拟浏览器运行、PyQuery解析和操作HTML文档,获取淘宝平台中某类商品的详细信息(商品标题、价格、销量、商铺名称、地区、商品详情页链接、商铺链接等),并基于第三方库openpyxl建立、存储于Excel表格中。# 全局变量count = 1 # 写入Excel商品计数# 启动ChromeDriver服务# 关闭自动测试状态显示 // 会导致浏览器报:请停用开发者模式# 把chrome设为selenium驱动的浏览器代理;# 窗口最大化。

qq_46315152的博客 4万+

js学习之变量、作用域和内存问题

js学习之变量、作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String; 特点: 在内存中占据着固定的地方和大小 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本 引用类型值: 是指那些可能由多个值够成的对象 特点: 引用类型的值是对象,...

116

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

weixin_72050316的博客 1047

js中的栈、堆、队列、内存空间

栈(stack) 、堆(heap)、 队列(queue)是js的三种数据结构。 栈(stack) 栈的特点是"LIFO,即后进先出(Last in, first out)"。数据存储时只能从顶部逐个存入,取出时也需从顶部逐个取出。《前端进击的巨人(一):执行上下文与执行栈,变量对象》中解释执行栈时,举了一个乒乓球盒子的例子,来演示栈的存取方式,这里再举个栗子搭积木。 举个栗子:乒乓球盒子...

lee_slly的博客 7585

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP变量、函数、内存管理,知识体系一共包含哪些部分?底层原理是什么?

PHP 是一种动态类型语言,其变量、函数和内存管理的实现方式与底层运行机制密切相关。理解这些底层原理对于优化代码性能、调试问题以及深入学习 PHP 至关重要。以下是围绕这一主题的知识体系分解及其底层原理分析。

长风破浪会有时的博客 790

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java Review (八、面向对象----成员变量和局部变量)

文章目录成员变量和局部变量是什么成员变量局部变量作用范围与命名成员变量的初始化和内存中的运行机制局部变量的初始化和内存中的运行机制 在Java语言中,根据定义变量位置的不同,可以将变量分成两大类:成员变量和局部变量。成员变量和局部变量的运行机制存在较大差异。 成员变量和局部变量是什么 成员变量指的是声明在一个类中,但在方法、构造方法和语句块之外的变量, 局部变量指的是声明在方法、构造方法或者语...

三分恶的博客 1240

USB HID免驱方案实现UPS电源低成本智能监控

UPS电源监控是数据中心、实验室及边缘设备运维的基础需求,其本质是将电力状态转化为可采集、可解析、可告警的数字信号。传统方案依赖SNMP、Modbus或串口协议,面临驱动兼容性差、系统适配成本高、老旧设备无接口等工程瓶颈。USB HID类设备凭借操作系统原生支持、零驱动安装、跨平台稳定读取等特性,成为轻量级监控的理想载体。本文聚焦HID Report Descriptor设计、STM32F072硬件实现与UPS私有协议语义映射,详解如何将‘哑’UPS转化为即插即用的智能节点,并支撑Web看板、多通道告警与长

weixin_33894640的博客 221

V8引擎的内存管理分析

概述 作为目前最受欢迎的JavaScript引擎,V8引擎从一出现就因其出色的性能而备受关注,更是帮助Chrome确立了浏览器霸主的地位。从浏览器结构来看,V8引擎位于Chrome最底层的webkit中(关于浏览器结构,请参考之前的一篇文章:浏览器(基于Chromium)运行机制剖析),用于替换webkit默认的JavaScript引擎 - JavaScriptCore,实现对JavaScript...

夕山雨的博客 2771

<Flash入门>对AS语言的一些理解

以下是我学习Flash一周以来对AS代码的一些理解,编码击规范的一些看法和对MVC框架的理解,学习过程中的一些笔记,很多地方都只是个人之见第一部分:对AS的理解:关于语法:由于AS3是基于ECMAScript,语法上看起来跟Javascript很像,而OOP部分基本上是跟JAVA

林榆耿的专栏 7564

属性值是变量时獲取json值為undefined_JavaScript 变量和作用域

JavaScript 变量和作用域学习一门语言,首先要学习的就是,这门语言如何表达信息和处理信息.在上一篇中,讲解了JavaScript的基本语法,了解JavaScript 的基本如何表达信息.本篇将更加深入的讲解,JavaScript的信息的表达. 将遵循如下图的讲 在上一篇文章中,我们都知道了,JavaScript中的基本类型有:undefined、null、Number、Boolean、S...

weixin_39851974的博客 208

三、面向对象——3-成员变量和局部变量

3-成员变量和局部变量 1.成员变量和局部变量 2.成员变量的初始化以及内存中的运行机制 3.局部变量的初始化以及内存中的运行机制 4.变量的使用规则 转载于:https://www.cnblogs.com/ljiwej/p/7275548.html...

weixin_30555753的博客 101

JavaScript 的“后台人生”:内存如何偷偷干活

深入剖析 JavaScript 内存机制,涵盖调用栈、执行上下文、栈与堆的分工、闭包的内存本质及垃圾回收原理。通过实战代码揭示变量存储、函数调用与内存管理的底层逻辑,助你写出更高效、无泄漏的 JS 代码。

2302_80706750的博客 631

C#中dll调用方法

一、DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或...

aqx60186的博客 205

【python基础】程序结构与对象模型

本文深入解析Python核心设计原理,从程序结构到对象模型全面剖析。主要内容包括:1) Python模块化设计,展示程序组织规范与导入机制;2) 代码分行技巧,详解显式/隐式行连接符用法;3) 对象三要素(标识、类型、值)及内存模型;4) 变量动态引用机制与垃圾回收;5) PEP8命名规范与标识符规则;6) 对象操作实战,演示引用传递、深浅拷贝等特性。通过系统讲解Python运行机制,帮助开发者掌握其优雅简洁背后的设计哲学与实践技巧。

m0_55845928的博客 973

java疯狂讲义第三次阅读----第5/6章面向对象(上)

理解类的初始化过程和实例的初始化过程 重载:构造器重载,初始化块在构造器之前调用,因此构造器如果包含相同代码应放置在普通初始化块中,或者使用this(参数列表进行) 初始化块执行的顺序:代码的逻辑顺序 构+普初=初始化对象 静态初始化块=初始化类 构造器是一个类创建对象的根本途径,因此系统会为该类提供一个默认的构造器 static:区分类和实例 有的属于类本身,没有的属于实例...

Mar.三月 131

颠覆你对方法调用的看法 高!

注意:如果你是一个初学者,对实例方法,虚方法的调用还不太清楚,强烈建议你不要阅读本文,因为这里面的代码会让你完全崩溃掉。          如果你对实例方法,虚方法的运行机制已经了如指掌,并且,对方法和对象的内存布局也心中有数,那么本文可能会颠覆你以前对他们的认识。          阅读本文的最佳方式就是亲自演练一下,如果看完之后有疑惑,那么是正常的,但是稍加思考就会想明白。

u013716371的专栏 456

PHP程序员如何使用第一性原理学习PHP,知识体系一共包含哪些部分?底层原理是什么?

第一性原理是一种从最基本的事实出发,通过逻辑推导重新构建知识的方法。对于 PHP 程序员来说,使用第一性原理学习 PHP 意味着不依赖“类比思维”(如模仿现有代码或教程),而是从 PHP 的基本概念、底层实现和运行机制入手,深入理解其本质。

长风破浪会有时的博客 710
上一篇: 关于二进制的原码,反码和补码的问题初步理解
下一篇: 静态变量中的两种两种取出方式self和对象取值
宇宙第一帅
博客等级 码龄12年 22粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值