企业门为什么要建设门户网站注册网站流程
web/
2025/9/26 14:57:05/
文章来源:
企业门为什么要建设门户网站,注册网站流程,网页游戏排行榜枪战,wordpress换主题出错字幕办原文链接#xff1a;https://jonskeet.uk/csharp/memory.html人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配#xff0c;引用类型在堆上分配”这句话造成了很多混乱。这完全是不对的#xff0c;本文试图澄清这个问题。变量中有什么#xff1f;理解.NET中内… 原文链接https://jonskeet.uk/csharp/memory.html 人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配引用类型在堆上分配”这句话造成了很多混乱。这完全是不对的本文试图澄清这个问题。变量中有什么 理解.NET中内存工作方式的关键是理解变量是什么以及它的值是什么。在最基本的层面上变量是变量名和内存之间的关联。变量的值是与之关联的内存中的内容。该值占用内存空间的大小和值的解释取决于变量的类型 - 这正是值类型和引用类型之间的差异所在。 引用类型变量的值始终是引用或null。如果是引用则它必须是与其变量类型兼容的对象的引用。例如以Stream s声明的变量s的值是null或Stream类型或其兼容类型实例的引用。引用类型变量所占内存空间的大小是引用的大小引用的大小在32位模式下固定为4个字节在64位模式下固定为8个字节。 值类型变量的值始终是其对象本身的值。例如对于给定的结构 以PairOfInts pair声明的变量pair的值是整数对本身而不是对一对整数的引用。其所占内存空间则是两个整数的大小即8个字节。请注意值类型变量永远不能赋值为null - 因为这没有任何意义值类型变量不是一个引用。那么东西存放在哪里 变量的分配位置取决于声明它的上下文局部变量在栈上分配。这包括引用类型变量 - 变量本身位于栈上其引用的值分配在堆上。方法参数也计为局部变量但如果使用ref、out、in修饰符修饰它们则它们不再是原始类型而是转换为托管指针类型Type 此时传递的是原变量的指针不再是变量本身。引用类型的对象始终在堆上分配。值类型的对象始终内联分配。即在方法中声明的值类型变量在栈上分配而作为类的实例字段的值类型变量将在堆上分配。静态变量在堆上分配包括引用类型和值类型中声明的静态变量。无论创建多少个实例静态变量都共享一个内存空间。 上述规则有几个例外在使用匿名方法时的外部变量和迭代器中的局部变量会由编译器优化为其它类型的实例字段这些变量会转移到堆中分配。举个例子 上述文字描述可能听起来有点复杂但一个完整的例子可以让事情更清楚一些 让我们看一下标记“XXX”位置时内存中的内容。在栈上分配一个PairOfInts类型的对象对应变量z。在堆上分配一个Test类型的对象在栈上分配一个引用指向该对象对应变量t1。以32位模式举例该对象在堆中占用20个字节8个字节的头信息所有堆对象都有8个字节用于存储PairOfInts实例4个字节用于存储字符串引用。在堆上分配一个Test类型的对象在栈上分配一个引用指向该对象对应变量t2。该对象与上面的对象非常相似。在栈上分配一个引用对应变量t3。这个引用是null - 它没有引用任何对象。在栈上分配一个引用对应变量t4并赋值t1引用的对象此时t1和t4引用堆内存中的同一个对象。最后在堆内存中有一个静态变量PairOfInts.counter。原文https://www.cnblogs.com/minotauros/p/11254159.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81250.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!