首页 新闻 赞助 找找看

重学CLR,一个C#的基础问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-25 00:07

最近在重新回炉CLR via C#这神书,发现书里面讲值类型和引用类型时又一个问题没交代清楚:

关于变量。stack上引用类型的变量存的是heap上相应数据的地址;stack上值类型的变量存了所有需要的数据;它们在刚被声明时都在heap上;用的时候才被压倒stack上。

那么问题来了:C#里面的函数(方法)都是存到哪里的呢?按常理冯氏机的数据码和逻辑码都是混在一起的,那C#(CLR)里怎么对待用户编写的函数呢?是一直存在一个专用stack上?还是和数据一样,声明后存在heap上,运行到需要用它时再压到stack上?压的时候是全压?还是只压一个跳转到函数本体的指路地址?

 

书里貌似没有对此详细介绍,当然正常编程用不到了解这些细节,但是弄清楚总有好处,逼死强迫症啊。。。

T_Razer的主页 T_Razer | 初学一级 | 园豆:112
提问于:2014-10-20 02:47
< >
分享
最佳答案
1

你这样理解就够了

有固定长度的都在栈上 这样便于查询(这里可以提高查询效率 原理类似于 hashtable )

而不能确定长度的都在堆上

栈上或者堆上有一个地址指向目标位置

收获园豆:9
小眼睛老鼠 | 老鸟四级 |园豆:2731 | 2014-10-20 10:10
其他回答(2)
1

只压一个跳转到函数本体的指路地址

收获园豆:1
我是糖糖 | 园豆:446 (菜鸟二级) | 2014-10-20 09:04
0

不明白,应该是在堆上滴

Set sail | 园豆:540 (小虾三级) | 2014-10-20 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册