C#编程-描述内存分配

描述内存分配

分配给变量的内存通过两种方式引用:值类型和引用类型。内置数据类型,诸如int、char和float都是值雷兴国。当您声明int变量时,编译器会分配一个内存块以保持该整数值。请思考以下语句:

	int Num = 50;

上述语句为保存值50的Num1变量分配内存。
引用类型(如类)由编译器以不同的方式处理。当您声明一个类变量时,编译器不会分配内存块以保持某个类。而是分配一块内存,该内存能够存储对另一个包含该类的内存块的引用。当new关键字用来创建对象时,会为类对象分配。

值类型包含数据,而引用类型包含对存储数据的位置的引用。因此,值类型称作直接类型,而引用类型称作间接类型。下图显示了值类型变量和引用类型变量。

在这里插入图片描述
在上图中,名为Num1的值类型变量具有值5.名为Car的引用类型变量具有到存储值Rolls Royce Phantom的内存位置的值。

要了解值类型引用,请考虑这样一个示例,您将变量Num1声明为int,并且赋予值50。如果您将另一个变量Num2声明为int,并将Num1,Num2将包含于Num1一样的值。但是,两个变量包含值50的不同副本。如果您修改Num1中的值,则Num2中的值不会更改。

以下代码段是值类型变量的示例:

	int Num1 = 50;  //declare and initialize Num1int Num2 = Num1;  //Num2 contains the copy of the data in Num1Num1++;  //incrementing Num1 will have no effect on Num2

下图显示了如何在上例中讲内存分配到值类型变量。

在这里插入图片描述

注释
所有值类型都是在栈上创建的。栈存储器的组织类似于堆在书架上的书。

要了解引用类型,请思考类Car。如果Car类的BWM对象用同一个类中的另一个对象Ford初始化,那么Ford和BWM都将引用相同的位置。

以下代码是引用类型变量的示例:

	using System;namespace Ref_Type{class class1{static void Main(string[] args){Car Ford = new Car();Ford.Model = 10();Car BMW = Ford;BMW.Display_Model();Ford.Display_Model();}}class Car{public int Model;public void Display_Model(){Console.WriteLine(Model);}}}

在这里插入图片描述

注释
所有的引用类型都是在堆上创建的。堆存储器类似于在一行中一本本排列的书。

除了内置数据类型(例如:int和float),还有其他的值类型(例如:结构和枚举),它们是用户定义道德数据类型。类似地,还有各种引用类型,例如,数组和集合。

小问题:
所有引用类型均在______上创建。
答案:Heap

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

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

相关文章

kubernetes(二)创建集群

kubernetes(一)概述与架构 云原生实战 语雀 官网 Kubernetes 文档 | Kubernetes 更新:移除 Dockershim 的常见问题 | Kubernetes B站课程:https://www.bilibili.com/video/BV13Q4y1C7hS/?p26 安装版本说明: 视频教程…

【nginx】linux(centos版本)安装nginx

目录 一、下载安装包1.1 官网下载1.2 linux命令下载 二、安装2.1 安装依赖包2.2 安装nginx 三、启动四、访问五、关停六、重载配置 一、下载安装包 1.1 官网下载 1.官网地址 https://nginx.org/en/download.html2.版本说明 1.Mainline version-主线版本 2.Stable version-稳…

LeetCode 2487. 从链表中移除节点:单调栈

【LetMeFly】2487.从链表中移除节点:单调栈 力扣题目链接:https://leetcode.cn/problems/remove-nodes-from-linked-list/ 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输…

聊一聊 .NET高级调试 内核模式堆泄露

一:背景 1. 讲故事 前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下: 在我的分析旅程中都是用户态模式的内存泄漏,像上图中的…

使用pnnx将Torch模型转换为ncnn

1. 引言 以往我们将Torch模型转换为ncnn模型,通常需经过Torch–>onnx,onnx–>ncnn两个过程。但经常会出现某些算子不支持的问题。 ncnn作者针对该问题,直接开发一个Torch直接转换ncnn模型的工具 (PNNX),以下为相关介绍及使…

超快速排序

title: 超快速排序 date: 2024-01-05 11:51:43 tags: 逆序对 categories: 算法进阶指南 题目大意 解题思路 逆序数是一个序列每一个数的左边有多少比他本身大的值。将一个序列排序完整,最小交换次数即是逆序数之和。使用归并排序的同时,将每一个逆序数求…

C#用StringBuilder高效处理字符串

目录 一、背景 二、使用StringBuilder便捷、高效地操作字符串 三、实例 1.源码 2.生成效果 四、实例中知识点 1.StringBuilder类 (1)构造函数 (2)属性 (3)方法 2.Environment.NewLine 属性 一、…

SurfaceView和TextureView理解相关

一、为什么要使用SurfaceView 我们知道View是通过刷新来重绘视图,系统通过发出VSSYNC信号来进行屏幕的重绘,刷新的时间间隔是16ms,如果我们可以在16ms以内将绘制工作完成,则没有任何问题,如果我们绘制过程逻辑很复杂,…

SSD 颗粒还要涨价50%,入手前小心速度陷阱

大伙应该感受到了,自今年年中开始 SSD 普遍开始了小幅涨价。 但即便涨价到现在,NAND 厂商仍属于倒亏状态... 原因很简单,库存太多。 根据 TrendForce 的报道,主要制造商价格将需要再次上涨 40% 以上才能不亏,而达到盈…

【ZYNQ入门】第五篇、AXI HP口读写数据原理

目录 第一部分、AXI总线的相关知识 1、ZYNQ架构 2、AXI 总线和 AXI 接口以及 AXI 协议 3、AXI 总线与 ZYNQ 的关系 4、AXI 总线介绍 5、AXI 接口介绍 6、AXI 协议介绍 7、AXI高效传输的原因 8、常见总线汇总 9、HP接口写时序配置 10、HP DDR的地址分配 11、缓存一…

如何缓解BOT攻击?分享灵活准确的防御之道

BOT流量在所有互联网流量中的占比过半,而且存在好坏之分。其中“好”的BOT,比如在互联网上搜索和查找内容的BOT,它们是我们不可或缺的帮手。恶意的BOT进行信息数据爬取、薅羊毛等攻击行为,正损害着企业和用户的利益。专业数据统计…

将文本文件导入Oracle数据库的简便方法:SQL Developer

需求 我有一个文本文件dbim.txt,是通过alert log生成的,内容如下: 2020-09-11 2020-09-11 ... 2023-12-03 2023-12-03 2023-12-26我已经在Oracle数据库中建立了目标表: create table dbim(a varchar(16));我想把日志文件导入Or…

若依管理系统部署

本文章仅供参考,由于个软件版本不同可能会有偏差。 登录系统打开cmd 编辑文件 这些文件分别打开,打开后在浏览器会出现若依管理系统后台,输入账号 admin 密码 123456即可进入后台。 本文章仅供参考,由于个软件版本不同可能会有…

Linux内存管理:(六)页交换算法

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 在Linux操作系统中&#x…

synchronized锁的底层原理

synchronized 锁是 Java 中用于实现线程同步的关键字。它提供了一种简单而有效的方式来确保多个线程之间的互斥访问。底层原理可以通过 Java 的内存模型和对象监视器锁(Monitor Lock)来理解。 Monitor结构如下: 在 Java 的内存模型中&#x…

Spring Boot 与 Spring 框架的区别

一、前言 Spring Boot 和 Spring 框架是由 Spring 项目提供的两个关键的技术栈,它们在 Java 开发中扮演着不同的角色。在阐述其区别之前,我们先大致了解下这两个框架 二、Spring 框架 1、背景 Spring 框架是一个全栈的企业应用开发框架,起…

springboot社区养老服务系统设计与实现

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一 、设计说明 1.1 研究背景 当…

梯度、散度、旋度

目录 梯度Gradient 散度Divergence 旋度Curl 梯度Gradient 即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模); Scalar -> Vector ,表示标量变化最快的方向&…

FPGA——VIVADO生成固化文件,掉电不丢失

VIVADO生成固化文件 (1)加入代码(2)生成bin文件,并且下载 (1)加入代码 设计文件(.xdc)中加入这段代码: set_property CFGBVS VCCO [current_design] set_property CONFIG_VOLTAGE 3.3 [current_design] set_property BITSTREAM.GENERAL.COMPRESS true [current_de…

echarts实现点击不同的柱子实现类目的不同名字

实现效果如下图: 首先实现echarts堆叠柱状图数据为0的不占用x轴空间 option {tooltip: {trigger: axis,axisPointer: {type: shadow},},legend: {},grid: {left: 3%,right: 4%,bottom: 3%,containLabel: true},xAxis: [{type: category,position: bottom,data: [园区内, 园区…