TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #624 255
Heap و Stack Allocation در C# 🧠💾(بخش اول)

درک نحوه‌ی تخصیص (allocation) و مدیریت حافظه در #C برای بهینه‌سازی عملکرد (performance) برنامه و اطمینان از استفاده‌ی کارآمد از منابع بسیار حیاتی است.

در این راهنمای جامع، مفاهیم heap و stack allocation در #C را بررسی می‌کنیم؛ اینکه چگونه کار می‌کنند، چه زمانی استفاده می‌شوند، و چگونه بر عملکرد کد شما تأثیر می‌گذارند.

مقدمه‌ای بر Memory Allocation

مدیریت حافظه در #C اغلب توسط runtime مربوط به NET. انجام می‌شود؛ به این معنا که توسعه‌دهندگان در بیشتر مواقع نیازی به تخصیص و آزادسازی دستی حافظه ندارند.

با این حال، درک اینکه داده‌های شما چگونه و در کجا تخصیص داده می‌شوند — در stack یا در heap — می‌تواند به شما کمک کند کدی کارآمدتر و با performance بهتر بنویسید. ⚙️

در سی‌شارپ ، stack و heap دو ناحیه‌ی حافظه هستند که برای ذخیره‌سازی داده‌ها استفاده می‌شوند:

• ءstack برای static memory allocation استفاده می‌شود

• ءheap برای dynamic memory allocation استفاده می‌شود

ءStack Allocation چیست؟

ءstack ناحیه‌ای از حافظه است که value typeها و pointerهای reference type را ذخیره می‌کند.
این ساختار از مدل Last-In, First-Out (LIFO) پیروی می‌کند؛ به این معنی که آخرین داده‌ی تخصیص داده‌شده، اولین داده‌ای است که آزاد می‌شود.

به دلیل این ساختار، stack allocation بسیار سریع و کارآمد است. 🚀

ویژگی‌های Stack Allocation:

🔹️Automatic Memory Management:
داده‌ها به‌صورت خودکار هنگام خروج از scope آزاد می‌شوند

🔹️LIFO Structure:
استفاده از مدل LIFO باعث استفاده‌ی بهینه از حافظه می‌شود

🔹️Limited Size:
اندازه‌ی stack محدود است و برای objectهای بزرگ مناسب نیست

ءHeap Allocation چیست؟

ءheap برای dynamic memory allocation استفاده می‌شود.
اینجاست که reference typeها (مانند objectها، stringها و ...) تخصیص داده می‌شوند.

ءheap توسط Garbage Collector (GC) مدیریت می‌شود که به‌صورت دوره‌ای حافظه‌ای که دیگر استفاده نمی‌شود را آزاد می‌کند. ♻️

ویژگی‌های Heap Allocation:

🔹️Managed by Garbage Collector:
ء GC فرآیند آزادسازی حافظه را به‌صورت خودکار مدیریت می‌کند

🔹️Dynamic Allocation:
ءobjectها می‌توانند حتی پس از اتمام متدی که آن‌ها را ایجاد کرده، باقی بمانند

🔹️Larger Memory Pool:
ءheap می‌تواند نسبت به stack objectهای بسیار بزرگ‌تری را ذخیره کند

تفاوت بین Stack و Heap

تفاوت‌های کلیدی بین stack و heap allocation در #C حول محور نحوه و زمان تخصیص و آزادسازی حافظه می‌چرخند.

حافظه‌ی stack کارآمد است و برای داده‌های کوتاه‌عمر (short-lived) که scope آن‌ها محدود به function یا method است مناسب می‌باشد.

در مقابل، heap برای داده‌هایی استفاده می‌شود که نیاز دارند فراتر از scope یک method باقی بمانند؛ مانند instanceهای reference type.

ءstack مدیریت حافظه‌ی خودکار و بسیار سریعی را فراهم می‌کند، اما از نظر اندازه محدود است و نمی‌تواند ساختارهای داده‌ای بزرگ و پیچیده را مدیریت کند.

ءheap در حالی که انعطاف‌پذیری بیشتر و تخصیص حافظه‌ی بزرگ‌تری ارائه می‌دهد، نیازمند garbage collection است که مقداری overhead در performance ایجاد می‌کند. 📉

نحوه‌ی عملکرد Stack در #C: مثال

برای درک بهتر stack allocation، به مثال زیر توجه کنید:
public void StackExample()
{
int a = 5;
int b = 10;
int result = a + b;
}

در مثال بالا:
اعداد صحیح a، b و result روی stack تخصیص داده می‌شوند زیرا از نوع value type هستند

زمانی که متد StackExample به پایان می‌رسد، تمام حافظه‌ی استفاده‌شده توسط این متغیرها به‌صورت خودکار آزاد می‌شود
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →