日期:2014-05-17  浏览次数:20644 次

到底是编译器还是.net framework把值类型创建在了栈上?
我很想知道int i=1;这样的语句,C#到底是:

(1)像C/C++那样编译时在栈上,为System.Int32预留一个位置,还是说
(2)在运行时,.net framework判断int是一个值类型,因此创建一个栈上的自动变量?

到底是哪一种呢? 谢谢。

------解决方案--------------------
对于任何语言来说,都是运行的时候才有堆栈的概念。
------解决方案--------------------
只有全局静态变量,才是编译器放在程序的数据区,并且在程序启动的时候一次性被操作系统加载到内存中。

堆栈上的东西,显然是调用这个函数的时候才被创建,在函数退出的时候被销毁。因为函数调用是先进后出的关系(最先执行的函数,最后运行完,它调用的函数后执行,先执行完),故而是“堆栈”。
------解决方案--------------------
c语言没有值类型与引用类型的说法。但是c#人为的创造出了这个,int是值类型,所以肯定存储在栈上
是不是自动变量,要看int i=1是在怎样的上下文中。如果是在函数中则是自动变量(和c语言一样)。
如果是类的字段则不属于自动变量。