أهلا ومرحبا. الآن بعد أن فهمنا تخصيص الذاكرة الديناميكي
، يتعين علينا تنفيذه ، علينا أن نعرف بالفعل كيفية القيام بذلك في كود c.
لذلك سنتحدث عن ثلاث وظائف مهمة حقًا ، malloc
، calloc ، realloc.
ترى أن لديهم نوعًا ما أسماء حيث يتم استدعاء تخصيص
الذاكرة وإعادة التخصيص.
الطريقة الأبسط والأكثر شيوعًا لتخصيص الذاكرة هي من
خلال وظيفة المكتبة القياسية المسماة malloc.
هذا هو تخصيص ذاكرة ديناميكية في وقت التشغيل.
لاستدعاء هذه الوظيفة ، تحتاج إلى تضمين ملف رأس lib القياسي.
تحدد عدد بايتات الذاكرة التي تريد تخصيصها كوسيطة لها.
ما تم إرجاعه من هذه الوظيفة هو عنوان البايت الأول من الذاكرة الذي تم تخصيصه.
نظرًا لأنك تحصل على عنوان مرتجع ، فإن المؤشر هو المكان الوحيد لوضعه فيه.
لذلك هذا هو السبب في أن تخصيص الذاكرة الديناميكي ممكن فقط
من خلال مفهوم المؤشر هذا لأنه يقوم بإرجاع العناوين.
يمكنك فقط وضع عنوان في مؤشر ، وهذا ما يخزنه المؤشر ، ويخزن المؤشر عنوانًا.
إذن ، هذا هو كيفية القيام بذلك ، بناء جملة بسيط للغاية.
عادة ، عند إنشاء المؤشر الخاص بك ، لست مضطرًا إلى ذلك.
يمكنك إنشاء المؤشر الخاص بك وضبطه على قيمة خالية.
ثم في السطر التالي ، يمكنك مالوك.
ولكن هنا هو بناء الجملة القياسي الذي تقوم بإنشاء مؤشر int الخاص
بك ، المؤشر إلى نوع int.
وبعد ذلك ستلاحظ أنك اتصلت بـ malloc.
وهنا ، نقول malloc ، سنقوم بإنشاء 100 بايت لـ malloc
وبعد ذلك سنقوم برميها إلى مؤشر int.
نظرًا لأن malloc يُرجع عنوانًا فقط ، يجب عليك
تحويله إلى مؤشر نهاية لأن هذا العنوان
يخزن مؤشر int.
هذه هي الطريقة القياسية للقيام بذلك.
أنت الآن تطلب 100 بايت من الذاكرة
وتخصيصها لعنوان كتلة الذاكرة لرقم p.
سيشير pNumber إلى موقع int الأول في بداية 100 بايت التي تم تخصيصها.
ما يعنيه هذا هو أنه نظرًا لأن الأعداد الصحيحة هي 4 بايت للقطعة الواحدة ،
فيمكن أن تحتوي على 25 قيمة int.
ومرة أخرى ، هذا بافتراض أن لديك 4 بايت.
الآن اعتمادًا على النظام الذي تقوم بتشغيله ، قد تكون أكبر ، وربما أصغر.
لذلك يجب أن ترى مشكلة هذا. لن يعمل هذا الرمز على أنظمة
مختلفة لأنك تقوم بالتخصيص بناءً على افتراض ، بناءً
على افتراض حجم int.
لذلك ليس من الجيد حقًا استخدام malloc
بهذه الطريقة برقم ثابت 100.
ما تريد القيام به هو أنك تريد استخدام sizeof عامل التشغيل.
لذلك سيكون من الأفضل إزالة الافتراض القائل بأن ints هي 4 بايت.
بدلاً من ذلك ، إذا كنت تريد تخصيص مساحة لـ 25 عددًا صحيحًا داخل وسيطة malloc
، فحدد عدد الأعداد الصحيحة
التي تريد تخصيصها ثم اضربها في حجم الأعداد الصحيحة.
وهذا سيجعل الكود أكثر قابلية للنقل.
سيعمل هذا الرمز الآن على أنظمة مختلفة وأنظمة تشغيل مختلفة وبنيات مختلفة.
ما زلت تلقي قيمة الإرجاع بالعنوان لأنه يجب أن يشير إلى
نوع int ، لذلك تقول int star. الاختلاف الوحيد هنا هو أنك تستخدم sizeof عامل التشغيل.
يعد Sizeof عاملًا مهمًا حقًا عند تخصيص الذاكرة باستخدام malloc أو استخدام
calloc أو realloc.
أنت تستخدم دائمًا عامل التشغيل sizeof
وتريد استخدامه للنوع الذي تخصصه ثم تضربه في عدد الأرقام
المعينة التي تريدها ، لذلك إذا كنت تريد تخزين
25 int ، فأنت تفعل 25.
لذا فإن حجة malloc أعلاه تشير بوضوح إلى أنه يجب توفير وحدات بايت
كافية لاستيعاب 25 قيمة من النوع int.
أيضا ، كما ذكرت ، لاحظ فريق التمثيل. يؤدي هذا إلى تحويل العنوان ، الذي
يتم إرجاعه بواسطة الدالة إلى مؤشر النوع إلى مؤشر int و int.
يُرجع Malloc مؤشرًا من النوع void ، وهذا ما يجعله مفيدًا للغاية.
يقوم بإرجاع هذا العنوان ولكنه مؤشر فارغ.
تذكر أننا تحدثنا عن مؤشرات الفراغ ولماذا تكون المؤشرات الفارغة
مفيدة لأنه يمكنك الآن الحصول على وظيفة يمكن أن تأخذ معلمات مختلفة ويمكنها إرجاع
مؤشر فارغ. أنت الآن ترى قوة إرجاع
مؤشر الفراغ ، مرة أخرى ، ولكن
لاستخدامه ، لتعيين بيانات إليه بالفعل ، ولإلغاء مرجعيته ، عليك أن تقوم
بإلقائه.
إذا لم نرغب في الإدلاء بهذا ، فيمكننا القول باطل رقم p النجمي.
نحن لا نلقيها ، ولكن بعد ذلك سيتعين علينا في النهاية أن نلقيها
بمجرد أن نرغب في استبعادها.
لكن هذا هو السبب في أننا يجب أن نلعب من malloc. إنه يعيد عنوانًا وتريده أن يشير إلى
نوع int ، ويعيد نوعًا فارغًا.
يمكنك طلب أي عدد من البايت.
ومع ذلك ، فهو يعتمد على نظامك ومقدار الذاكرة الموجودة على نظامك.
لذلك إذا حاولت إنشاء أو محاولة طلب الكثير من البايتات أو
كان هناك بعض القيود ، فقد تفشل.
وعندما يفشل ، فإنه يُرجع قيمة خالية ، ويعيد malloc قيمة خالية.
وهذا أمر جيد لأن المؤشرات عندما تشير المؤشرات إلى قيمة فارغة ، فهذا يعني
أنها لا تشير إلى أي ذاكرة ، لذلك لا
يمكنك إتلاف أو تغيير أي ذاكرة بدون قصد.
لذلك ، من الجيد دائمًا بعد إجراء malloc أن تتحقق
فورًا من وجود قيمة خالية قبل استخدامها ، تمامًا
كما هو الحال عند تعيين البيانات أو
كما هو الحال تمامًا عندما تقوم بإلغاء إشارة مؤشر.
تريد التأكد من أنك تشير بالفعل إلى شيء ما.
هنا ، نخصص بعض الذاكرة للرقم p مؤشرنا ثم نقول
إن لم يكن الرقم p.
تذكر أن القيمة الخالية هي صفر.
لذلك يمكنك فقط استخدام علامة "لا" عليها. لا يتعين عليك مقارنتها بالفعل بـ null.
يمكنك ، يمكنك مقارنتها بصفر ، فهي تجعلها أكثر قابلية للقراءة ، وربما تجعلها أكثر وضوحًا.
لكن يمكنك فقط أن تقول ليس p رقم ، وهذا في الواقع لا يعني
واحد ، والصفر هو صفر. لذلك هذا سوف يتحقق من وجود فارغة.
وإذا كانت فارغة ، فهذا يعني في الأساس أن الذاكرة
لم يكن من الممكن تخصيصها. إذا لم تكن قادرًا على تخصيص ذاكرة في برنامجك ، فأنت في مشكلة.
ولذا فإن ما يجب عليك فعله عادةً في هذا الكود للتعامل مع فشل تخصيص
الذاكرة هو أنه يجب عليك الإجهاض ، يجب عليك استدعاء
exit ، يجب عليك الخروج من برنامجك. لأنه إذا كان برنامجك لا يمكنه تخصيص الذاكرة ، فإن برنامجك مسدود.
لذلك عادة ما يكون هذا هو استدعاء إحباط حادث إذا لم تتمكن من تخصيص الذاكرة.
على الأقل عند القيام بذلك ، يمكنك عرض رسالة إنهاء
البرنامج. إنه أفضل بكثير من السماح
للبرنامج بالاستمرار عندما لا نكون قادرين على تخصيص الذاكرة.
لأنه بعد ذلك قد تستمر في محاولة استخدام هذه الذاكرة
، ستكون فارغة ، لذلك سيتعطل البرنامج على أي حال ولكنك
لن تعرف السبب بالضرورة.
عليك أن تنظر إلى مكدس المكالمات. سيستغرق الأمر وقتًا أطول لتصحيح هذا الخطأ.
تحرير الذاكرة. لقد ذكرت الآن أنه نظرًا لأنك
المبرمج المسؤول عن تخصيص الذاكرة ، يجب عليك التخلص من الذاكرة
عندما تتوقف عن استخدامها لأن الذاكرة مورد حيوي ، خاصة في الأنظمة
المضمنة.
لا يجب أن تستخدم الذاكرة إذا لم تكن بحاجة إليها. لذلك عليك تحرير الذاكرة.
تريد دائمًا تحرير الذاكرة عندما لم تعد مطلوبة.
سيتم تحرير الذاكرة التي تخصصها على الكومة تلقائيًا عندما يكون البرنامج موجودًا
، وهو أمر جيد لأنه يقوم ببعض التنظيف.
لكن من الأفضل بكثير تحرير الذاكرة بشكل صريح عند الانتهاء من
ذلك حتى لو كان ذلك قبل الخروج مباشرة.
إنها أنظف ، افعلها
دائمًا مجانًا أو حرر الذاكرة دائمًا بعد تخصيصها ، فأنت
تريد اتباع هذه القاعدة. هذه قاعدة صارمة صارمة.
حرر الذاكرة دائمًا إذا قمت بتخصيصها.
يحدث تسرب للذاكرة عندما تخصص بعض الذاكرة ديناميكيًا
ولا تحتفظ بالمرجع حتى لا تتمكن من تحريره.
ربما تكون خارج نطاق هذا المرجع الذي لا يمكنك ذلك. أنت لا تطلقه.
هذا يسمى تسرب الذاكرة. هناك ذاكرة مخصصة لكنها لم تعد مستخدمة.
يحدث هذا غالبًا عندما تكون في حلقة ، وتقوم بتخصيص الذاكرة في حلقة.
أنت في الحلقة. أنت تخصص هذه الذاكرة. يمكنك استخدامه داخل
الحلقة ، ثم تقفز خارج الحلقة ولم تعد تحررها.
كل تكرار حلقة يخصصها.
لذلك لتحرير الذاكرة التي قمت بتخصيصها ديناميكيًا
، لا يزال بإمكانك الوصول إلى هذا العنوان.
لذلك عادةً ما تريد ذاكرة خالية عند الانتهاء من استخدامها
وعادةً بالطريقة التي خصصتها لها.
ومع ذلك ، إذا كنت تقوم بنقل تلك الذاكرة إلى وظيفة أخرى ، ثم تكون
هذه الوظيفة مسئولية ، ولكنك عادة ما تريد تحرير الذاكرة والوظيفة
التي تخصصها لها.
لتحرير الذاكرة لكتلة من الذاكرة المخصصة ديناميكيًا
والتي قمت بتخزين عنوانها في مؤشر ، كل ما عليك فعله هو استدعاء
الوظيفة المجانية.
هذا في lib القياسي أيضًا. ما عليك سوى تمرير المؤشر إلى الوظيفة الحرة.
وعادة ، بعد تمرير هذا المؤشر ، تريد ضبطه على قيمة خالية
لأن هذا يعني أنه ليس لديك ذاكرة مخصصة له.
تحتوي الوظيفة المجانية على معلمة رسمية من النوع
void star ، لذا يمكنك تمرير أي نوع من المؤشرات
وستعمل.
لست مضطرًا إلى الإدلاء بها أو أي شيء من هذا القبيل.
طالما أن رقم p يحتوي على العنوان الذي تم إرجاعه عند تخصيص الذاكرة ، فستكون كتلة الذاكرة
بأكملها خالية للاستخدام مرة أخرى. يمكن للبرامج الأخرى استخدام تلك الذاكرة
، ويمكن لبرنامجك الآن استخدام تلك الذاكرة
، وهي مهمة عندما تكون على نظام مضمن.
وبعد ذلك ، كما ذكرت ، تريد دائمًا ضبط المؤشر على قيمة
خالية للإشارة إلى أن هذا المؤشر لم يعد يشير إلى أي شيء.
تم تحرير تلك الذاكرة.
هناك وظيفة أخرى لطيفة تسمى calloc.
هذا له مزايا أكثر من malloc. إنه مشابه جدًا لـ malloc
، لكن ما يفعله هو أنه يخصص الذاكرة بعدد من العناصر في حجم معين ويقوم
أيضًا بتهيئة الذاكرة.
هذا هو الاختلاف ، التهيئة. لقد تحدثت عن أهمية التهيئة.
لهذا السبب تريد
دائمًا تهيئة البيانات حتى تفهم أن هناك بيانات
تتوقعها.
عندما تقوم بإلغاء تهيئة البيانات ، فقد تكون هناك بيانات ليس لديك أي فكرة عنها.
لذلك ، قم دائمًا بتهيئة بياناتك بشيء ما.
و calloc أفضل قليلاً لأنه يفعل ذلك من أجلك.
يتطلب وسيطتين ، له معلمتان.
عدد عناصر البيانات التي تتطلب مساحة ، وحجم كل عنصر بيانات.
تم الإعلان عنه في رأس lib القياسي.
أنت تسميها تمامًا كما تسميها malloc. تبدو إلى حد كبير بنفس الطريقة.
في هذا المثال ، نقوم بإنشاء مؤشر
عدد صحيح ، ونخصص 75 عددًا صحيحًا من حجم
int. لذلك فهي تأخذ معاملين.
إنه أكثر نظافة لأنك لست مضطرًا لإجراء عملية الضرب.
في malloc ، كان عليك أن تفعل 75 حدثًا بحجم الوقت.
هنا تقول 75 فقط ، أنت تقوم
بإنشاء 75 ints وحجم كل منها 4 بايت أو أيًا كان
النظام الذي يعود من حجم المشغل.
ولكن مرة أخرى ، تكمن أهمية هذا في أنه سيتم تهيئة كل تلك البيانات أيضًا ، فقد تكون القيمة
المعادة فارغة إذا لم تكن قادرة على تخصيص تلك الذاكرة والتي بدورها لا يجب عليك إجهاضها.
لكنه مشابه جدًا لاستخدام malloc باستثناء الإضافة الكبيرة هي هذه التهيئة.
تتم تهيئة جميع ints إلى الصفر ، وهذه مشكلة كبيرة حقًا ،
وميزة كبيرة.
من الأسهل أيضًا استخدامه مع المعلمتين.
دعنا نتحدث عن وظيفة أخرى تسمى realloc.
تمكّنك وظيفة realloc من إعادة استخدام أو تمديد الذاكرة التي قمت بتخصيصها
مسبقًا باستخدام malloc أو calloc.
لذا فهذه طريقة لتغيير مقدار الذاكرة المخصصة أثناء الجري
ديناميكيًا.
لذا يمكنك في البداية إنشاء الكثير من الذاكرة ثم تدرك
أن هذه ليست ذاكرة كافية. حسنًا ، ما يمكنك فعله هناك هو أنه يمكنك فقط استدعاء
realloc ، وهذا سيعيد تخصيص الذاكرة.
تتوقع قيمتين للوسيطتين ، مؤشر يحتوي على عنوان تم تحويله
مسبقًا بواسطة استدعاء إلى malloc.
لذلك لديك مؤشر يحتوي على بعض الذاكرة المخصصة أو calloc ثم حجم
وبايت الذاكرة الجديدة التي تريد تخصيصها.
لذلك سيخصص هذا مقدار الذاكرة الذي تحدده بواسطة الوسيطة الثانية
، هذه هي الوسيطة الثانية. ينقل محتويات الذاكرة المخصصة مسبقًا ،
المشار إليها بواسطة المؤشر ، بحيث يعرف تلقائيًا مقدار الذاكرة التي
قمت بتخصيصها مسبقًا لأنك تمرر المؤشر.
وبعد ذلك ستضيف إلى ذلك الذاكرة المخصصة حديثًا.
ويعيد مؤشر الفراغ إلى الذاكرة الجديدة.
لذلك عليك إعادة صياغته عند استدعاء realloc تمامًا مثل الآخرين.
يتم إرجاعه فارغًا إذا لم تكن قادرًا على إعادة التخصيص
، وهو مرة أخرى ربما يكون خطأ فادحًا ويجب عليك إجهاضه.
الميزة الأكثر أهمية في هذه العملية هي أن realloc يحافظ
على محتويات منطقة الذاكرة الأصلية ، فأنت تقوم فقط بتوسيع تلك الذاكرة.
قد تكون مجزأة لأنك ربما لم تتمكن من القيام بذلك بالتسلسل ، ولكن لا
يزال لديك كل تلك الذاكرة التي يمكنك تخصيصها للبيانات الآن.
لنلقي نظرة على مثال.
في هذا المثال ، سنستخدم malloc ثم نعيد تخصيص الذاكرة
ثم نحررها.
لذلك نحن هنا بصدد إنشاء مؤشر حرف.
نحن لا نقوم بتهيئته ليصبح فارغًا ، ربما يجب أن نكون كذلك.
لكنها لا تحتوي على أي ذاكرة مخصصة لما تشير إليه.
لديها ذاكرة مخصصة لتخزين
المؤشر ، وهو مجرد عنوان. ولكن إذا حاولت الذهاب إلى هذا العنوان ، فسيتم استضافة برنامجك.
إذن ما تفعله هو أن تسمي malloc.
نحن هنا نقول malloc 15.
سيؤدي هذا إلى إنشاء 15 بايت لمؤشر الحرف.
نلقيها ، لأنها ترجع مؤشر الفراغ. لذا فإن str هو مؤشر الآن
يحتوي على ذاكرة مخصصة لما يشير إليه.
يمكننا بعد ذلك استخدام نسخة str لتمرير بعض البيانات إلى ما تشير
إليه ، سلسلة نصية ونطبع
السلسلة في العنوان.
حسنًا ، ثم ندرك أن ما خصصناه لـ 15 بايت ليس كبيرًا
بما يكفي.
ثم نسمي "realloc" ، ونمرر في المؤشر
وهو str ونريد إعادة تخصيص 25 بايتًا إضافيًا ، ثم يعيد ذلك نقطة الفراغ
حيث يتعين علينا إلقاءها مرة أخرى.
الآن لا يزال لدينا في ذاكرتنا جايسون.
يمكننا الآن استدعاء سلسلة نصية متسلسلة ، ونقوم بالتسلسل إلى سلسلة com
، لذا الآن سيكون Jason. com ثم نقوم بطباعته.
ثم أخيرًا وليس آخرًا ، ربما يكون أهم شيء في
هذه الشريحة ، لذلك ليس لدينا تسرب للذاكرة هو أننا نسميها مجانًا.
دائما اتصل مجانا عندما تتصل malloc.
لذلك دعونا نلقي نظرة على هذا المثال داخل كتل التعليمات البرمجية.
إليك مثال الكود الخاص بنا داخل محرر كتل
التعليمات البرمجية الخاص بنا.
وأول شيء يجب أن تلاحظه هو أننا نقوم بتضمين ملف
رأس lib القياسي لأن هذا هو المكان الذي توجد فيه وظائف malloc
ووظائف realloc بالإضافة إلى وظيفتنا المجانية.
أيضًا نظرًا لأننا نستخدم بعض وظائف str ، والتسلسل والنسخ
، فإننا نقوم بتضمين سلسلة. ح.
الآن في السطر الثامن ، سنقوم بإنشاء مؤشر الشخصية الخاص بنا.
لا توجد ذاكرة مخصصة لها.
يجب أن نهيئ هذا ليصبح فارغًا لأنه
لا يشير إلى أي شيء حتى الآن. في السطر 11 ، نسمي malloc.
وربما ينبغي أن نقول 15 ضعف حجم
الحرف في حالة اختلاف حجم بايتات
الحرف ثم نضعه في مؤشر حرف لأن malloc يُرجع
فراغًا. ثم نقوم بنسخه.
إذا حاولنا نسخ هذا ولم نفعل أي شيء في السطر 11 ، فسوف يتعطل
البرنامج لأنه ليس لدينا ذاكرة مخصصة لما تشير السلسلة إليه.
ثم نطبع السلسلة والعنوان.
الآن نسمي realloc.
نحتاج إلى تخزين بيانات أكثر من 15 بايت ، لذلك
سنقوم بإعادة التخصيص بـ 25 بايت
، وربما نريد إعادة تخصيص حجم الحرف مرة أخرى لنكون
متسقًا.
نلقي هذا ثم نسلسله إلى موقع ذاكرتنا الحالي
الذي يحتوي على jason. com ، وسنقوم بطباعة jason. كوم.
ثم أخيرًا وليس آخرًا ، في السطر 20 ، نحرر تلك الذاكرة وهو
أمر مهم حقًا.
لذلك دعونا نمضي قدما وندير هذا. وما سترونه فقط هو أنه عندما
نطبعه في المرة الثانية ، يكون لدينا التسلسل.
إذن السلسلة الأولى
، لدينا ذاكرة مخصصة وهو العنوان 000C2918.
ثم أنشأنا عنوانًا جديدًا عن طريق إعادة تخصيص وأخذ الحجم الحالي للمؤشر
الذي مررناه كوسيطة.
لذلك فإن 000C0CD8 لديها بالفعل المزيد من البيانات
المخصصة لها ، والبيانات الموجودة
في jason و 25 بايت أخرى.
ولذا فإن ما تلاحظه هو أعمال التسلسل.
لأنه عندما أعدنا التخصيص
، وضعنا محتويات jason في تلك الذاكرة وقمنا بتوسيعها.
هناك الكثير من المزايا لاستخدام هذه المكالمات malloc و calloc هذه ومكالمات إعادة التخصيص المجانية.
تريد استخدام هذه ، تريد فهمها. وظائف بسيطة جدا للاستخدام.
لذا في الشريحة الأخيرة ، دعنا نستعرض بعض الإرشادات.
تريد تجنب تخصيص كميات صغيرة من الذاكرة ، فهذا غير فعال.
عندما تقوم بتخصيص ذاكرة على الكومة ،
فإنها تحتوي على بعض النفقات العامة معها.
وإذا قمت بتخصيص كتل صغيرة من الذاكرة ، فسيكون لها عبء أكبر بكثير من تخصيص
عدد أقل من الكتل الكبيرة.
لذا خصص الذاكرة التي تحتاجها ،
لكن لا تفعل ذلك كل جملتين مع إعادة تخصيص ، قم بعمل أجزاء
كبيرة.
تمسك بالذاكرة فقط طالما كنت في حاجة إليها. الذاكرة هي مورد نادر.
عندما يكون في الكومة ، يكون أكثر ندرة.
لذلك عندما تنتهي من كتلة من الذاكرة ، اتصل مجانًا.
تأكد دائمًا من أنك توفر لتحرير الذاكرة التي خصصتها ، وقرر أين ستحرر الذاكرة
في التعليمات البرمجية الخاصة بك عندما تكتب الكود الذي يخصصها.
تأكد من أن لديك حق الوصول إلى هذا المؤشر.
إذا كنت بحاجة إلى جعل المؤشر عالميًا ، فأنت بحاجة إلى القيام بذلك.
ولكن عادة أينما تخصص في هذه الوظيفة ، يجب عليك تحريرها في تلك الوظيفة.
إذا كانت لديك وظائف أخرى تطلق الذاكرة
نيابة عنك ، فأنت تفترض أن هذا ليس جيدًا. هناك الكثير من الاقتران والتبعيات هناك.
يجب أن يكون الشخص الذي قام بإنشائه هو الشخص الذي يحذفه.
لا تضع المسؤولية على وظائف أخرى وما شابه.
تأكد من عدم الكتابة عن غير قصد فوق عنوان الذاكرة التي قمت بتخصيصها
على الكومة قبل تحريرها ، سيؤدي ذلك إلى حدوث تسرب للذاكرة.
لذلك إذا حاولت كتابة عدد كبير جدًا من البايتات أو إذا كان لديك فائض ، فقد
تواجه مشكلات.
لذا كن حذرًا بشكل خاص عند تخصيص ذاكرة داخل حلقة لأن
هذا يمكن أن يسبب مشاكل في فائض المخزن المؤقت.
اتمنى ان يكون ذلك مفيدا. تخصيص الذاكرة الديناميكي صفقة كبيرة وكبيرة.
سأعطيك تحديًا يساعدك على أن تصبح أكثر دراية بهذا
، ولكن تأكد من فهمك لهذا المفهوم. شكرًا لك.