首页 新闻 会员 周边 捐助

关于.net堆栈分配相关的问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-08 20:07

记得以前看过这样的问题:

 string s="b";string s="a"+"b";问它们的内存的分配原理?

我的想法是首先string是引用类型 ,所以首先将b的地址分配到堆栈上,然后将托管堆里面开辟个空间存放指向b的指针,所以是2次,关于第二个,由于.net内部将a,b自动合并,效果跟第一个一样,也是2次,请问我这种理解对吗?以及是我对堆栈内存分配描述正确吗?请大神赐教!

隔壁老王来了的主页 隔壁老王来了 | 初学一级 | 园豆:99
提问于:2014-01-08 17:25
< >
分享
最佳答案
1

我给你贴个链接,你看看,然后想想怎么把你问的问题的表达方式修改下:

http://wenwen.soso.com/z/q136560276.htm

收获园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-01-08 17:53

好吧,受教了,应该是堆栈和托管堆的分配过程,你能帮我解答下吗?谢谢

隔壁老王来了 | 园豆:99 (初学一级) | 2014-01-08 17:59

@王志平: http://blog.csdn.net/syaguang2006/article/details/9347745

你先看下,网上也有,我先回家吃饭。

Launcher | 园豆:45050 (高人七级) | 2014-01-08 18:02
其他回答(1)
1

string s="b", 操作2次  string s="a"+"b"操作3次

 

引用相当于指针.string s="b",首先"b"是一个常量,在字符串池里.

string s,会分配一个内存空间,算是一次内存操作.

s="b"的时候是一个赋值操作,将变量S的值改为常量b所在堆内存的位置.也就是第二次内存操作

string s="a"+"b",前面那个一样,a+b是不一样,a+b首先读取2个常量,可以肯定不在一个位置,也就是会有2次内存操作

然后进行运算后,会有一个结果,这个结果是一个新对象,也就会再操作一次内存,加上前面一个也就是3次

有一个问题,在内存中堆栈是分开,一个堆空间一个栈空间,一般值类型在栈上,引用类型在堆上

收获园豆:5
吴瑞祥 | 园豆:29449 (高人七级) | 2014-01-08 18:03

你能跟我讲讲他在堆栈是具体是怎么分配的吗

支持(0) 反对(0) 隔壁老王来了 | 园豆:99 (初学一级) | 2014-01-08 18:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册