作者tomex (tomex_ou)
看板C_Sharp
标题Re: [问题] return的区域变数scope?
时间Tue Sep 13 19:53:52 2005
※ 引述《NCRCD (光和影的谜题)》之铭言:
: : 虽然gc没那麽快回收,但终究是超出scope范围的变数,
: : 大家怎麽看这问题呢?
: 你忽略了很基本的问题:
: 1.scope和动态配置(new)的记忆体空间是不相关的
: 所以new出来的东西不会因为scope而释放, 另外觉得你对C#的GC似乎
: 也不是很了解, C#的GC在回收时只会回收完全被没有被参考到的物件,
: 所以dt1参考的物件是不会被回收的, 我觉得你需要去看看GC的运作机制.
谢谢,stack的变数名,及heap的记忆体空间,
虽然透过scope的操作让ref关系消失而被回收空间
但「GC不会回收被ref到记忆体」这原则,则可解释原因。
: 2.在C#里除了数值型别, 其他型别不加方法参数都是传参考(包括string)
: 所以string接收时不会复制1份新的记忆体空间.
TextBox1.Text = "abc";
string s = TextBox1.Text; // if不会复制,为何不同了呢?
s = "123"; // TextBox1.Text = "abc"
string的指派都是会产生不同的记忆体空间
因此才会有StringBuilder等append()来增加效能的物件。
我倒是认为,c#无论传递什麽,都是采「复制」的方式
例如reference type的变数传入method()当参数,
是复制了一份ref变数,只是指向相同的位址
否则何需要创造ref/out等关键字呢?
--
贯彻分享精神
我为人人,人人为我
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.78.132.15
※ 编辑: tomex 来自: 211.78.132.15 (09/13 19:57)