[ظ…ظ‡ظ… ط¬ط¯ط§] طھط*ط±ظٹط± ط§ظ„ط°ط§ظƒط±ط© ظˆظ…ط¹ط±ظپط© ط§ظ„ط³طھط§ظƒ stack ظˆظƒظٹظپظٹط© طھظپط±ظٹط؛ظ‡



بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

اليوم ان شاء الله سنتكلم عن موضوع مهم
والاهم من ذلك
هو ان الكثير من المبرمجين يغفل عنه ولا يلقي له بالاً
لكنه هو اداة قوية من ادوات نجاح برمجيته وسرعتها
الا وهو تحرير الذاكرة من المتغيرات التي نستخدمها

مقدمة نظرية:
من المعروف لدى الجميع، او على اقل تقدير معروف لدى من يعرف بالكمبيوتر، ان تنفيذ الاوامر في الكمبيوتر تتطلب داتا او ما يسمى بيانات لكي يستخدمها المعالج، وهو يخزن او يستورد هذه البيانات من الذاكرة الاساسية ويطلق عليها main memory ، اي باختصار الرام RAM
وفي حالتنا نحن من نقوم ببرمجة التطبيقات، يقوم المعالج بحفظ المتغيرات والثوابت في هذه الذاكرة،
لكن كيف يتم تخزين هذه البيانات؟
هذه البيانات تخزن داخل الذاكرة طبقا لمفهوم الstack ، طبعا السؤال الان ما هو ال stack؟
تخيل ان لديك صندوق كبير ومفتوح فقط من الجهة العلوية وانت تضع فيه الملفات
كل ملف فوق الاخر، والاهم من ذلك ان اخر ملف يوضع هو اول الملفات التي تخرج
يعني لو وضعت في قاع الستاك ملف ثم وضعت فوقه ملفات اخرى، ورجعت بدك تستخرجه لا بد انك تشيل معه كل اللي فوقه
هذا هو الستاك الفيزيائي اللي تكلمنا عنه
وهذا مثال مبسط
هذه الفكرة اقصد فكرة الستاك موجودة في الذاكرة التي تحدثنا عنها
كل متغير وكل شي يحتاج حفظ يتم حفظه في هذه الستاك في الذاكرة
لذلك اذا تركنا المتغيرات بعد الانتهاء منها بدون معالجة ، فاننا سنسبب مشكلة في الاداء
حتى في النهاية ممكن يصير عنا مشكلة معروفة لدى المبرمجين
وهي مشكلة stack overflow يمكن البعض سمع فيها
وهذا ما سنعالجه في درس مفصلنا البسيط لليوم

حل المشكلة:
لحسن الحظ الحل لهذا النوع من المشاكل يكون سهل جدا، ولا يحتاج اي خبرة او ذكاء او فهم عالي، الحل عبارة عن خطوة اضافية، قد تتعب في البداية، لكن الا ترى ان جودة برنامجك تستحق منك هذا القدر اليسير من الجهد البسيط؟ اتعتقد ذلك ام لا؟

الحل بيكون عن طريق تحرير الستاك من هذه المتغيرات، ولكن بعد انتهاءنا منها، وهو يكون على قسمين اللي هم اكثر استخداماً:
المتغيرات اللي بنستخدمها يا متغيرات حجزناها احنا ووضعنا فيها قيم عادية
مثلا
رمز PHP:
<code style="white-space:nowrap"> <code> $variable="some value";
</code> </code>

بعد استخدام المتغير والانتهاء منه
قم باضافة السطر التالي البسيط بطبيعة الحال
رمز PHP:
<code style="white-space:nowrap"> <code> unset($variable);
</code> </code>

اذن الحل عن طريق دالة unset التي مسؤوليتها هي تحرير الذاكرة من هذا المتغير
استهلاك الذاكرةالناتج عن استعلامات قواعد البيانات
وهذه تنتج بشكل مباشر من لود هذه الاستعلامات
مثلا

رمز PHP:
<code style="white-space:nowrap"> <code> $sql="sum query here";
</code> </code>

رمز PHP:
<code style="white-space:nowrap"> <code> $result=mysql_query($sql);
</code> </code>

في هذه الحالة نضيف الدالة التالية
رمز PHP:
<code style="white-space:nowrap"> <code> mysql_free_result($result);
</code> </code>

بذلك نكون قد حررنا الذاكرة من كثير من المساحة التي عدم تحريرها قد يؤدي الى اوفرفلو

ملاحظة اخيرة، هنالك ايضا بعض الامور التي تسبب ارتفاع استهلاك الذاكرة يمكنك معالجتها بسهولة
مثل اغلاق مقابض اتصالات قواعد البيانات عن طريق دالة
mysql_close();
وايضا اغلاق مقابض الملفات
عن طريق
fclose();

في الختام
ارجو ان يكون الدرس مفصل البسيط
قد نال اعجابكم واستحسانكم
فلا تنسونا من صالح الدعاء
الدرس مفصل من اعدادي انا اخوكم
مهند عيسى - فلسطين











التعديل الأخير كان بواسطة Hudaislam; 21 - 01 - 2014 الساعة 03:57





©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى©