Local Variables و Stack Allocation
متغیرهای محلی (Local variables)، شامل value typeها و reference به objectها، روی stack ذخیره میشوند.
با این حال، referenceهای مربوط به objectها به heap اشاره میکنند؛ جایی که دادهی واقعی object در آن قرار دارد.
زمانی که یک value type بخشی از یک reference type باشد (برای مثال، یک فیلد داخل یک class)، آن value type بهعنوان بخشی از object مربوط به reference type روی heap ذخیره میشود.
نحوهی عملکرد Heap در #C: مثال
کد زیر را در نظر بگیرید:
public class Person
{
public string Name;
public int Age;
}
public void HeapExample()
{
Person person = new Person();
person.Name = "Alice";
person.Age = 30;
}
در این مثال: object از نوع Person روی heap ایجاد میشود زیرا یک reference type است.reference با نام person روی stack ذخیره میشود که به object روی heap اشاره میکند.
فیلدهای Name و Age نیز بهعنوان بخشی از object مربوط به Person روی heap ذخیره میشوند
Value Typeها در مقابل Reference Typeها
درک value typeها و reference typeها به شفافسازی نحوهی استفاده از حافظه کمک میکند.
🔹️Value Types:
بهصورت مستقیم در حافظهی stack ذخیره میشوند. مانند int، float، bool و structهای سفارشی
🔹️Reference Types:
روی heap ذخیره میشوند، اما reference مربوط به آنها روی stack قرار میگیرد. مانند classها، arrayها و stringها
مثال: Value Type در مقابل Reference Type
// Value type, allocated on the stack
int x = 10;
// Reference type, reference on stack, object on heap
Person p1 = new Person();
در مثال بالا، x روی stack ذخیره میشود زیرا یک value type است، در حالی که p1 روی heap ذخیره میشود زیرا یک reference type است.
Memory Management در .NET
ءruntime مربوط به NET. شامل یک Garbage Collector (GC) است که به مدیریت تخصیص و آزادسازی حافظه برای heap کمک میکند.
ءGC بهصورت خودکار objectهایی که همچنان در حال استفاده هستند را ردیابی کرده و حافظهای که دیگر مورد نیاز نیست را آزاد میکند. ♻️