已经知道,当引用类型作为其他引用类型的成员时,存储情如下:
1.引用类型对象的数据部分始终存放在堆里。
2.值类型对象和引用类型的引用既可以存在栈里,也可以存在堆里。取决于实际环境。
例如:有一个MyType的引用类型的实例,包含两个成员:一个值类型,一个引用类型。
它的值类型明显要存储在堆里。那么引用类型成员呢?
由1可知,内部的引用类型作为对象的一部分,其引用也保存在对立面。
---------------------------------------------------------------------------
以上总结自《C#图解教程》第三章引用类型与值类型部分
---------------------------------------------------------------------------
建立一个最普通的程序(以VS自动创建的代码为例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test2
{
class Program
{
static void Main(string[] args)
{
}
}
}
外层对象基本上都是引用类型(此例中的Program类),按上面的分析,我们无论
自己添加类,还是完善此类,最终对象都是要存储中堆中的。那么栈是不是很少(或者几乎)用不到呢?
----------------------------------------------------------------------------
在《C# 4.0图解教程》24页中,说道栈的作用有三种:
1.某些类型变量的值。
2.程序当前的执行环境。
3.传递给方法的参数。
这三条看着到觉得很熟悉,但有总觉得思路很不清晰。
哪些类型的值?引用类型?
程序当前的执行环境?是要把CLR当做操作系统来理解吗?CLR也要管理多个程序,也需要上下文切换?
传递给方法的参数?这时候不分引用类型和值类型了吗?
---------------------------------------------------------------------------
期待不啬赐教。