public MyInt AddFive(int pValue)
{
MyInt result = new MyInt(); // 堆分配對象
result.Val = pValue + 5;
return result; // 返回引用
}
// 執行結束:棧幀銷毀,堆對象存活,引用返回給調用者
int x = 3;
int y = x; // y 獲得獨立副本 3
y = 4; // x 仍為 3
class MyInt { public int Val; }
MyInt x = new MyInt { Val = 3 };
MyInt y = x; // y 指向同一堆對象
y.Val = 4; // x.Val 變為 4!
GC.Collect()。GC 步驟:暫停所有線程 → 標記可達對象 → 壓縮堆 → 更新引用 → 恢復線程。效率影響巨大,故需編寫高性能代碼減少 GC 頻率。
ArrayPool、StringBuilder。IDisposable/using)。