C++ Memory Management

🔹 تعریف

  • Memory Management در C++ یعنی کنترل و استفاده از حافظه RAM برای برنامه.

  • دو نوع حافظه اصلی وجود دارد:

    1. Stack (پشته) → حافظه خودکار برای متغیرهای محلی

    2. Heap (انبوه) → حافظه دینامیک که با new و delete مدیریت می‌شود

🔹 1️⃣ حافظه خودکار (Stack)

  • متغیرهای محلی داخل تابع به طور خودکار ایجاد و پاک می‌شوند.

  • مثال:

#include <iostream> using namespace std; int main() { int x = 10; // حافظه روی stack ذخیره شد cout << x << endl; }

🔹 2️⃣ حافظه پویا (Heap)

  • وقتی اندازه حافظه در زمان کامپایل مشخص نیست یا بزرگ است، از heap استفاده می‌کنیم.

  • با new و delete می‌توان حافظه را اختصاص داد و آزاد کرد.

مثال ایجاد حافظه پویا

#include <iostream> using namespace std; int main() { int *ptr = new int; // اختصاص حافظه روی heap *ptr = 50; cout << *ptr << endl; // 50 delete ptr; // آزاد کردن حافظه }

مثال با آرایه پویا

#include <iostream> using namespace std; int main() { int n = 5; int *arr = new int[n]; // اختصاص حافظه برای آرایه for (int i = 0; i < n; i++) { arr[i] = i + 1; cout << arr[i] << " "; } delete[] arr; // آزاد کردن آرایه }

🔹 خروجی: 1 2 3 4 5

🔹 نکات مهم

  1. متغیرهای stack خودکار پاک می‌شوند، نیاز به delete نیست.

  2. هر new باید با delete جفت شود، وگرنه Memory Leak رخ می‌دهد.

  3. استفاده از heap انعطاف‌پذیری بیشتری برای داده‌های بزرگ یا زمان اجرای نامشخص فراهم می‌کند.

  4. می‌توان از smart pointer ها (C++11 به بعد) برای مدیریت خودکار heap استفاده کرد:

#include <memory> std::unique_ptr<int> p = std::make_unique<int>(10);