欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱[整 .pdf

    • 资源ID:39879110       资源大小:1.80MB        全文页数:7页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱[整 .pdf

    6 个重要的.NET 概念:栈,堆,值类型,引用类型,装箱,拆箱引言本篇文章主要介绍.NET 中 6 个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱。文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆;最后介绍值类型和引用类型,并说明一些有关它们的重要原理。最后通过一个简单的示例代码说明装箱拆箱带来的性能损耗。声明变量的内部机制在.NET 程序中,当你声明一个变量,将在内存中分配一块内存。这块内存分为三部分:1,变量名;2,变量类型;3,变量值。下图揭示了声明一个变量时的内部机制,其中分配的内存类型依据你的变量类型。.NET中有两种类型的内存:栈内存和堆内存。在接下来的内容中,我们会了解到这两种类型的详细内容。栈和堆为了明白什么是栈和堆,先让我们看下下面示例代码的内部机制:1publicvoid Method1()2/Line 1 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -3 inti=4;4/Line 2 5inty=2;6/Line 3 7class1 cls1=newclass1();8这里一共有3 行代码。让我们一下逐行看一下它们是如何执行的:第 1 行:当这行代码执行时,编译器为它分配一小块栈内存。运行时栈负责提供程序所需的内存;第 2 行:程序继续执行。如同名字一样,栈在第一块内存的顶部分配了一块内存。你也可以认为是模块或零件一块一块叠起来;内存的分配与释放遵循后进先出(后进先出)逻辑,换句话说,内存只能在示例中i内存块的顶部分配或释放。第 3 行:在第3 行,我们创建了一个对象。当该行执行时,编译器在站上创建了一个指针,真实的对象存储在另一种叫“堆”的内存中。堆并不跟踪运行内存,它更像一堆随时可以访问的对象。堆用于动态分配内存。这里需要着重说明的是引用指针是分配在栈上。声明 Class1 cls1 时并不会给Class1 的实例分配内存,而是分配一个栈变量cls1(并设置为null),然后把它指向“堆”。退出方法:当方法退出时,它释放了栈上所有内存变量。换句话说,栈上所有的Int 变量都依据后进先出的逻辑被释放掉了。要注意,此时不会释放堆内存,这种内存稍后会被“垃名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -圾收集器”释放。现在可能会有很多朋友奇怪为什么要分配2 种内存,而不是仅用一种内存。如果仔细观察,你会发现基本类型并不复杂,他们值包含简单的值,如i=0。对象数据类型很复杂,它们会引用其它对象或基本类型。换句话说,它要保持其它多种多样的引用,而每种类型必须存在内存中。对象类型需要动态内存而基本类型需要静态内存。如果需要分配动态内存,那么就分配到堆上;反之在栈上。值类型与引用类型名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -现在我们明白了栈和堆,接下来看值类型和引用类型。值类型的数据和内存在同一个位置,而引用类型是一个指向内存的指针。下面示例是一个整形数据类型变量i 被赋给另一个整形数据类型变量j。它们的内存值都分配在栈上。当我们把一个int 值分配给另外一个int 值时,需要创建一个完全不同的拷贝。换句话说,你可以改变其中任何一个而不会影响另外一个。这种数据类型被称为值类型。当我们创建一个对象,并把一个对象赋给另外一个对象时,它们的指针指向相同的内存(如下图,当我们把obj 赋给 obj1 时,它们指向相同的内存)。换句话说,我们改变其中一个,会影响到另外一个,这种类型称为引用类型。那么那种类型是值类型和引用类型呢?名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -在.NET 中,依据数据类型,变量被分配到堆或栈上。“string”和Object 是引用类型,其他基本类型被分配到栈上,是值类型,如下图:装箱与拆箱通过上面学习,我们学到了很多有用的东西,其中最有用的是明白了当把数据从栈移动到堆上时会有性能损失。如下图实例,当我们把一个值类型装箱为引用类型时,数据从栈移动到堆上。反之,数据从堆移动到栈上。这种在堆和栈之间的移动带来了性能的损失。数据名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -从值类型转变为引用类型的过程称为“装箱”,反之为“拆箱”。如果编译上面的代码,在ILDASM 中看 IL 代码就会发下如何进行装箱拆箱操作的,如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -装箱拆箱的性能影响为了揭示装箱拆箱如何影响性能,我们把下面代码运行10000 次。一个函数有装箱操作,另一个只有简单代码。我们用简单的计时器看它们的运行时间。装箱函数耗时 3542 MS,无装箱操作的耗时2477MS。这说明在实际项目中,除非必须,否则应避免装箱,拆箱操作。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -

    注意事项

    本文(2022年个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱[整 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开