كم من الوقت يمكن أن تستمر تسرب الذاكرة في برامج rpgle؟

StackOverflow https://stackoverflow.com/questions/1503197

سؤال

أنا أضع في الإنتاج بعض رمز rpgle الذي يستخدم %alloc و dealloc لتخصيص الذاكرة. يجب أن يكون المبرمجون قادرين على ضمان عدم وجود تسرب الذاكرة الناتج ولكن أنا قلق بشأن ما يحدث إذا لم يفعلوا ذلك.

سؤالي هو: إذا فوضى المبرمجين وهناك نكون تسرب الذاكرة إذن متى سيتم استصلاح هذه الذاكرة؟ هل هو عندما يترك البرنامج الذاكرة أو عندما تنتهي المهمة؟

هل كانت مفيدة؟

المحلول

من الدليل المرجعي لشركة Ile RPG Programmer:

يتم تحرير التخزين ضمنا عندما تنتهي مجموعة التنشيط. لن يؤدي إعداد LR إلى أي خالية من التخزين من كومة الذاكرة الهيكة المخصصة بواسطة الوحدة النمطية، ولكن سيتم فقد أي مؤشرات لتخزين كومة الكومة.

إذا كان برنامج RPG الخاص بك في مجموعة التنشيط الخاصة به، فسيتم تحرير الذاكرة عند انتهاء البرنامج. بالطبع، عندما تنتهي عملك، فهل مجموعة التنشيط الخاصة بك. لذلك فإن إنهاء المهمة ستنظف دائما أي ذاكرة مخصصة.

نصائح أخرى

يبدو أنك تقترب من آر بي جي من خلفية C / C ++. لقد كنت برمجة في آر بي جي لمدة 8 سنوات تقريبا الآن وعدد قليل من المرات التي كان عليها استخدام٪ ALLOC () BIF.

يقال إنه إذا كنت تستخدم مجموعة تنشيط جديدة، يجب أن تكون على ما يرام. إذا كنت تستخدم مجموعة تنشيط مسماة ولا تصدر أمر RCLACTGRP أو كنت تستخدم مجموعة التنشيط الافتراضية، فقد يتم تشغيلها إلى مشكلات.

في الواقع، عليك دراسة آلية مجموعات التنشيط. قد تحدث تسرب الذاكرة، ولكن لن تفعل أي ضرر للجهاز (أحب AS400). ولكن يمكنك إيذاء البرامج الأخرى ضمن وظيفة ISERIES الخاصة بك (ملاحظة: إذا لم تكن من خلفية AS400، عليك أن تقرأ عن آلية عمل AS400).

إذا بدأت في إدارة مجموعات التنشيط داخل عملك بنفسك (في البرنامج الذي يكون فكورسي)، فيمكنك إنشاء منفصلة ونوع من منطقة الذاكرة. يتطلب بعض النفقات العامة (يجب عليك تسمية المجموعات) ولكن بعد ذلك لديك بيئة آمنة حيث يمكنك استخدام الأشياء القوية.

أنا لست على دراية تلك الوظائف المدمجة، ولكن بشكل طبيعي يتم تنظيف كل شيء عند انتهاء المهمة (أو يسجل المستخدم عند التفاعل). إذا لم تتمكن من العثور على إجابة، فيمكنني أن أشير إلى مجتمع آخر قد تكون إجابتك معروفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top