Re: [問題] return的區域變數scope?
※ 引述《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)
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章