14. الذاكرة في الحلقات الطويلة
الهدف
رابط إلى قسم «الهدف»أن تطبّق القواعد الثلاث في الحلقات الطويلة: ما يُبنى في كل دورة يُحرَّر في آخرها.
الشرح
رابط إلى قسم «الشرح»كل نص تبنيه، وكل قائمة وقاموس، يأخذ مكاناً في الذاكرة من مخصص، وهو ما تُحجز منه الذاكرة وتُعاد إليه. وفي الحلقات:
- ما تبنيه (نص بـ
+أونص(...)، قائمة، قاموس) يبقى حتى نهاية البرنامج إن لم تحرره، ثم يعود كله عند الخروج. وفي برنامج قصير لا ضرر في ذلك. - نص تبنيه وتسنده إلى متغير داخل حلقة طويلة حرّره بـ
خاتمه حرر(الاسم)بعد إنشائه، فيعود في آخر كل دورة. (حرر(س)تعيد المكان فوراً، وخاتمه جملةتؤجّل الجملة إلى الخروج من الكتلة.) - نص تبنيه ولا تسنده إلى متغير، بل تمرّره مباشرة إلى
اطبعأوطولأو مقارنة، يعود وحده بعد استعماله (منذ 0.8.0):اطبع("سطر " + نص(ع))لا يحتاجحرر.
لترى ما بقي، شغّل البرنامج بالخيار --debug-mem: يطبع في آخره كل سطر حجز ولم يُحرَّر، بعدد كتله وحجمها، الأكبر أولاً. هذا البرنامج يبني ألف نص في حلقة بلا حرر:
ا = "س"لكل ع في مدى(0, 1000): ن = "سطر " + نص(ع)وما يطبعه meem برنامج.م --debug-mem في آخره (من الكتاب المرجعي):
[ذاكرة] معلومة: كتل لم تُحرَّر من الافتراضي: 1000 (26890 بايت)، تعود للنظام عند الخروج سطر 3: 1000 كتلة، 26890 بايت تلميح: الحجز المتكرر في سطر واحد (حلقة في الغالب) يُعاد بـ خاتمه حرر(...) بعد إنشائه، أو بساحة للمرحلةالمثال
رابط إلى قسم «المثال»لكل ع في مدى(0, 3): ن = "سطر " + نص(ع) خاتمه حرر(ن) اطبع(ن)الأخطاء الشائعة
رابط إلى قسم «الأخطاء الشائعة»نسيان التحرير في حلقة طويلة يرفع ذروة استهلاك الذاكرة، ويكشفها الخيار --debug-mem بالسطر. واستعمال نص بعد تحريره يكشفه الكاشف (يعمل افتراضياً حين تشغّل meem برنامج.م) خطأ تشغيل بسطره. وتحرير القيمة نفسها مرتين خطأ:
م = جديد(1)حرر(م)حرر(م)رمز الخروج: 3
في فهرس الأخطاء: E0349
م = جديد(1)حرر(م)اطبع(م == لاشيء)تمرين
رابط إلى قسم «تمرين»ابنِ ألف نص في حلقة («سطر» ورقمه) واجمع أطوالها، وحرّر كل نص في آخر دورته بـ خاتمه حرر. شغّله بـ --debug-mem: إن لم يطبع تقرير ذاكرة فلا شيء باقٍ.
اعرض الحل
مجموع = 0لكل ع في مدى(0, 1000): ن = "سطر " + نص(ع) خاتمه حرر(ن) مجموع += طول(ن)اطبع("مجموع الأحرف: ", مجموع)اقرأ أيضاً
رابط إلى قسم «اقرأ أيضاً»الدرس 10: ثلاث قواعد · الذاكرة اليدوية · مرجع الذاكرة