freeCodeCamp/guide/arabic/cplusplus/dynamic-memory-allocation/index.md

40 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Dynamic Memory Allocation
localeTitle: تخصيص الذاكرة الديناميكية
---
## تخصيص الذاكرة الديناميكي في C ++
### ما هو تخصيص الذاكرة الديناميكي في C ++؟
* يشير **تخصيص الذاكرة** في C ++ إلى الذاكرة المخصصة للمتغيرات التي تستخدمها في البرنامج.
* **تخصيص الذاكرة الديناميكي** هو الذاكرة التي يتم تخصيصها للمتغيرات في وقت التشغيل كما يتم تحديد مقدار الذاكرة المطلوبة في وقت التشغيل.
* تأتي هذه الذاكرة من **كومة الذاكرة المؤقتة** ، في حين أن المتغيرات _غير الساكنة_ والمتغيرات _المحلية_ تحصل على ذاكرة من **المكدس** .
* في C ++ ، يمكن للمبرمج إجراء عمليات تخصيص الذاكرة يدوياً ، ويسمى **_تخصيص الذاكرة الحيوية_** .
* كان من الممكن في C القيام بتخصيص الذاكرة الديناميكية ، باستخدام وظائف _calloc_ و _malloc_ لتخصيص الذاكرة واستخدام وظيفة _حرة_ لإزالة تخصيص الذاكرة الديناميكية.
* في C ++ ، بالإضافة إلى أعلاه ، هناك وظيفتان ، _جديدتان_ _وحذفان_ لأداء تخصيص الذاكرة الديناميكية _وإلغاء_ التخصيص.
### مشغل جديد
* يمكن للمشغل `new` منح الذاكرة مبرمج من كومة الذاكرة المؤقتة (إذا كانت متوفرة). إذا كانت الذاكرة التي يطلبها المبرمج متاحة ، يقوم المشغل `new` بتهيئة الذاكرة ثم يقوم بإرجاع العنوان (المرجع) للذاكرة المخصصة.
* **بناء الجملة**
`pointer-variable-type` = `pointer-variable-type` `data-type;` **جديد** `data-type;`
المثال 1: `int *ptr` = **new** `int;`
المثال 2: `int *ptr2` = **new** `int[10];`
هنا ، يعد `pointer-variable-type` **مؤشرًا** `data type` . يمكن أن يكون `data-type` int أو char وما إلى ذلك أو نوع بيانات المعرفة من قبل المستخدم.
### مشغل DELETE
* تقع على عاتق المبرمج مسؤولية إلغاء تخصيص الذاكرة الموزعة ديناميكياً ، وإلا لن تكون الذاكرة متوفرة لإعادة توزيعها حتى نهاية البرنامج.
* لإلغاء تخصيص الذاكرة ، يمكن `delete` المشغل ويمكن استخدامه بواسطة المبرمج.
* **بناء الجملة**
**حذف** `pointer-type-variable;`
على سبيل المثال ، لتحرير الذاكرة المخصصة في المثال 1 أعلاه ، فإننا نكتب:
`delete ptr;`
وبالمثل ، على سبيل المثال 2 ، يمكن تحرير الذاكرة من خلال:
`delete ptr2` ؛
### تسريبات الذاكرة
تحدث التساؤلات عندما تفشل في إلغاء تخصيص الذاكرة الديناميكية التي قمت بتخصيصها من خلال المشغل `New` في نهاية البرنامج. إذا لم تقم بإلغاء تخصيصها مع عامل التشغيل Delete ، فسيستمر الكمبيوتر في إنشاء ذاكرة جديدة في الذاكرة المؤقتة في كل مرة يتم فيها تشغيل البرنامج. يؤدي هذا إلى إبطاء الكمبيوتر لأنه لم يتم حذف الذاكرة وتقلل الذاكرة المتوفرة لديك.