Re: [問題] return的區域變數scope?

看板C_Sharp (C#)作者 (tomex_ou)時間20年前 (2005/09/13 19:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
※ 引述《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)
文章代碼(AID): #139hlS0e (C_Sharp)
文章代碼(AID): #139hlS0e (C_Sharp)