المتغيرات المحلية
متغير أعلن داخل وظيفة غير المحلي. نطاق متغير محلي غير محدود لمجموعة وظيفة داخل الذي أعلن فيه. يمكن متغير محلي تهيئة من قبل نتيجة أي تعبير . كل مكالمة من وظيفة تهيئة متغير محلي. يتم تخزين المتغيرات المحلية في منطقة الذاكرة وظيفة المقابلة.
على سبيل المثال:
somefunc الباحث ()
{
الباحث ret_code = 0؛
...
العودة (ret_code)؛
}
نطاق متغير هو جزء البرنامج، الذي علبة المتغير المشار إليه. أعلن المتغيرات داخل كتلة (على الصعيد الداخلي)، لديها كتلة كما نطاقها. نطاق كتلة تبدأ مع تعريف متغير وينتهي مع قوس الصحيح النهائي.
المتغيرات المحلية أعلنت في بداية دالة أيضا على نطاق كتلة، وكذلك معلمات الدالة التي هي المتغيرات المحلية. يمكن أن تحتوي على أي كتلة تعريفات المتغير. إذا يتم تداخل الكتل و معرف في كتلة خارجي له نفس الاسم كمعرف في كتلة الداخلي، والمعرف كتلة الخارجي مخفيا، حتى تشغيل كتلة الداخلي قد انتهت.
على سبيل المثال:
باطل OnStart ()
{
// ---
كثافة العمليات ط = 5؛ // المتغير المحلي وظيفة
{
كثافة العمليات ط = 10؛ // وظيفة متغير
الطباعة ("داخل كتلة ط ="، ط)؛ // النتيجة هي I = 10؛
}
الطباعة ("كتلة خارج ط ="، ط)؛ // النتيجة هي I = 5؛
}
هذا يعني أنه في حين يتم تشغيل كتلة الداخلي، فإنه يرى قيم معرفات المحلية الخاصة بها، وليس قيم معرفات مع أسماء متطابقة في كتلة الخارجي.
على سبيل المثال:
باطل OnStart ()
{
// ---
كثافة العمليات ط = 5؛ // المتغير المحلي وظيفة
ل(الباحث ط = 0؛ ط <3، وأنا ++)
الطباعة ("داخل لأنني ="، ط)؛
الطباعة ("خارج كتلة ط ="، ط)؛
}
/ * نتيجة تنفيذ
داخل لط = 0
داخل لط = 1
داخل لط = 2
كتلة الخارجي ط = 5
* /
المتغيرات المحلية أعلن و ثابت لديها نطاق الكتلة، على الرغم من حقيقة أنها موجودة منذ بداية البرنامج.
كومة
في كل برنامج MQL5، يتم تخصيص مساحة ذاكرة خاصة تسمى كومة لتخزين المتغيرات المحلية وظيفة التي تم إنشاؤها تلقائيا. يتم تخصيص واحد المكدس لجميع الوظائف. حجم مكدس الافتراضي هو 256 كيلو بايت، ويمكن أن تدار حجم كومة باستخدام #property stacksize التوجيه مترجم.
ساكنة يتم تخزين المتغيرات المحلية في المكان نفسه حيث ثابتة وأخرى عالمية يتم تخزين متغيرات - في منطقة الذاكرة الخاصة، والتي وجدت بشكل منفصل من المكدس ديناميكيا المتغيرات التي تم إنشاؤها أيضا استخدام مساحة ذاكرة منفصلة من المكدس.
مع كل مكالمة وظيفة، يتم تخصيص مكان في بنية تخزين العناصر للمتغيرات غير ثابت الداخلية. بعد الخروج من وظيفة، والذاكرة المتاحة للاستخدام مرة أخرى.
إذا من الوظيفة الأولى ويسمى ثانية واحدة، ثم وظيفة الثانية تحتل الحجم المطلوب من ذاكرة كومة المتبقية لمتغيراته. وهكذا، عند استخدام وظائف وشملت، سيتم احتل مكدس الذاكرة بالتتابع لكل وظيفة. وهذا قد يؤدي إلى نقص في الذاكرة أثناء إحدى المكالمات وظيفة، ويسمى مثل هذا الوضع كومة تجاوز.
لذلك، بالنسبة للبيانات محلية كبيرة يجب عليك استخدام أفضل ذاكرة ديناميكية - عند دخول وظيفة، وتخصيص الذاكرة، وهو مطلوب لتلبية الاحتياجات المحلية، في نظام ( الجديد ، ArrayResize () )، وعند الخروج من وظيفة، والإفراج عن الذاكرة ( حذف ، ArrayFree () ).