当前位置: 首页 > news >正文

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

相关文章:

  • 2020年认证杯SPSSPRO杯数学建模D题(第一阶段)让电脑桌面飞起来全过程文档及程序
  • Python学习之路-编码风格
  • 外包做了5个月,技术退步一大半了。。。
  • 《计算机网络》 第三章 数据链路层
  • PostgreSQL ZIP版安装完全手册
  • Diffusion扩散模型学习3:Unet学习实现
  • 2023春季李宏毅机器学习笔记 03 :机器如何生成文句
  • 【实用技巧】Windows 电脑向iPhone或iPad传输视频方法1:无线传输
  • 杨中科 ASP.NET Core 中的依赖注入的使用
  • 寒假前端第一次作业
  • 模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?
  • Android 事件分发介绍
  • scala 安装和创建项目
  • 代码随想录算法训练营Day20 | 40.组合总和||、39.组合总和、131.分割回文串
  • 图片分类的脚本
  • 网络传输文件的问题
  • (三)从jvm层面了解线程的启动和停止
  • eclipse的离线汉化
  • happypack两次报错的问题
  • Mysql数据库的条件查询语句
  • React Transition Group -- Transition 组件
  • Spring Cloud中负载均衡器概览
  • Zsh 开发指南(第十四篇 文件读写)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 理清楚Vue的结构
  • 深度学习入门:10门免费线上课程推荐
  • 小程序测试方案初探
  • Spring第一个helloWorld
  • #162 (Div. 2)
  • (a /b)*c的值
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (备忘)Java Map 遍历
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (九)c52学习之旅-定时器
  • (未解决)macOS matplotlib 中文是方框
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)德国人的记事本
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)一些感悟
  • *** 2003
  • .NET Project Open Day(2011.11.13)
  • .net 无限分类
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • @RequestBody与@ModelAttribute
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [c#基础]DataTable的Select方法
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [IDF]摩斯密码
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用