روابط التخزين
زي ما اتكلمنا في البوست الفات عن المتغيرات
وتسميتها وحجمها وكيف ده بيتحدد بينطرح سؤال، السؤال هو طيب اذا انا بحجز حتة في
الذاكرة وفي اكتر من برنامج شغال في الكومبيوتر من الكومبايلر الشغال عليهو أو ال text editor – محرر النصوص – لحدي الويندوز أو أياً كان نظام
التشغيل الشغال فيهو ديل كلهم بيحجزو مساحة لمتغيرات في الرام فكيف الرام ما
بتتملي ويعلق الجهاز ويفضل شغال؟
الحاجة دي ما بتحصل لي حاجتين حنشوفهم في
البوست ده وهم عنوان البوست اللي هما روابط التخزين ودورة حياة المتغير.
بعني شنو ربط التخزين ببساطة المتغير
البعلن عنو في الكود بتاعي ما بيتحجز في الرام إلا في وقت محدد وعندو دورة حياة
بتبدأ ولمن تنتهي بيقوم الكومبيوتر بفضيهو من الرام.
ده بيقودنا لي العمليتين الأساسيات في
الموضوع وهم عمليات مضادة لي بعض اللي هم عملي التسكين او ما يعرف بي ال Allocation والعملية المعاكسة ليهو الأسمها التحرير أو Deallocation.
طيب العمليات بتحصل متين وكيف؟ مبدئياً زي
من اسمهم عملية التسكين هي عملية انو يربط متغيرك الاسمو x مثلا بي المساحة الفاضية الفي الرام الاسمها مثلا 0Xd0234، كده هو بكون حجز المساحة دي لي متغيرك
وقفلا من انو يتم تعديلها من اي برنامج تاني، عملية التحرير العكس تماماً برجع
المساحة الكانت محجوزة ومقفولة لي متغيرك لي بقية المساحات المتاحة للتخزين.
في انواع للروابط بتاعة التخزين دي خلونا
نشوفها
أولاً: في حاجة اسمها المتغيرات الساكنة أو
ال static
variables ودي بيتم فيها حجز خلايا الذاكرة
من قبل بداية التنفيذ أو ال execution وبتفضل محجوزة طوال ما
برنامجك منفذ وشغال ودي بتتعمل مثلا في لغة السي والسي بلس بلس باستخدام الكلمة
المحجوزة “static” في لغات زي باسكال ما بتدعم انو يكون عندك
متغير استاتيك، وفي لغات زي فورتران كل متغيراتها متغيرات ساكنة أو static.
زي أي حاجة في الدنيا المتغيرات الساكنة
عندها محاسن ومساوئ، من محاسنها انها فعالة أو زي ما بقولوا الخواجات efficient يعني بتصل ليها مباشرة، وكمان حساسة للتاريخ
في فروع البرنامج بمعنى أي تغير بتم للمتغير في دالة أو اي حتة بتغير على مستوى
البرنامج ككل. أما عيوبها فإنها ما مرنة بمعنى اي تغير بتم بعدل على القيمة في كل
حتة فما بنستفيد من مفاهيم زي النداء الذاتي أو ال recursion.
تانياً في حاجة اسمها ال stack-dynamic storage وصراحة غلبني اترجمها لو في زول عارف لها
اسم بالعربي بالله وريني المهم الفكرة انو بيتم ربط التخزين في لحظة تنفيذ السطر
أو التعليمة البرمجية الفيها اعلان عن متغير ونوع الربط بكون ساكن الفرق بينها
وبين المتغيرات الساكنة العادية أنو دي بتكون ساكنة في اطار الجزء المحدد في الكود
زي المتغيرات المحلية الفي الدوال في لغات زي السي والجافا.
من فوائدها انها بتسمح بالنداء الذاتي ومن
عيوبها انو بتطر تتابع عمليات التسكين والتحرير براك توريهو متين يحجز ومتين يفك
ودي عملية مرهقة ومتعبة لمن البرنامج زي مابكون عادة كبير وفيهو آلاف المتغيرات،
وبرضو أي تغير بتم في القيمة في أي فرع من البرنامج ما بكون اتغير على مستوى
البرنامج ككل، بالاضافة لي انو الاشارة لي عنوانها ما بتكون واضحةلأنو هي بتتحجز
مع العنوان والبرنامج شغال.
ثالثاً في حاجة اسمها ال explicit heap-dynamic وده فيهو المتغيرات عبارة عن خلايا ذاكرة ما
عندها اسم بيتم التسكين والتحرير فيها بموجهات صريحة ومحددة من المبرمج بيتم
تنفيذها أثناء ما البرنامج شغال زي لما في لغة سي بلس بلس نستخدم الكلمات المحجوزة
new و delete. في حالة new بيربط الذاكرة وفي delete بحررها.
من محاسنها انها بتوفر ليك مرونة في ادارة
الذاكرة. ومن عيوبها انها ما فعالة ولا يعتمد عليها لأنو لو نسيت تحرر الذاكرة
حتعمل مشكلة.
رابعاً في حاجة اسمها ال implicit heap-dynamic
allocation وده ببساطة الربط بتم
المن تدي المتغير قيمة زي في لغات بيرل وجافاسكريبت وال PHP.
من مميزاتها انها مرنة، ومن عيوبها انها ما
فعالة لانو كل الخصائص برضو مرنة فتصعب انك تلقى ال errors.
عموما ما تتلخم بالموضوع كتير بتاع ربط
التخزين ده لأنو غالباً ما بتتعامل معاه من قريب شديد لكن من المهم تاخد فكرة
وتعرف الحاجة بتتم كيف، هو موضوع محير شوية بس عموماً مع تطور لغات البرمجة الناس
بقت ما بتتطر تتعامل مع مساحات التخزين وظهرت تقنيات كتيرة ببتولى المسألة دي
نيابة عن المبرمجين، بس برضو العلام سمح.
أخيراً بعتذر طولت بس الدنيا جايطة شويتين
والزول مشغول حبتين، أحاول انو على الأقل في الاسبوع أعمل لي بوستين ويارب اكون
افدت لي زول أو يفهم من الرغي بتاعي ده حاجة وزي مابقولوا حبو الحب سمح، أنا بقول
ليكم برمجوا البرمجة سمحة.
ليست هناك تعليقات