تعرف اي الفرق بين الـ stack & Heap
الstack والheap الاتنين جزء من الRAM اللي هي الmain memory بتاعة الجهاز بس كل واحد ليه طريقة استخدام وليه نظام معين في التعامل
الstack ممكن تعتبره مكان مرتب ومنظم بيشتغل بنظام اسمه Last In First Out يعني آخر حاجة دخلت هي أول حاجة تطلع يعني مثلا لو عندك functions بتتندع جوا بعض أول function اتندعت بتتحط تحت وبعد كده كل function جديدة بتتحط فوقها ولما تيجي الfunctions تخلص بيتمسحوا واحدة واحدة من فوق لتحت بالترتيب العكسي
الstack كمان بيتم فيه تخزين الvariables اللي انت بتعرفها جوا الfunctions زي لما تكتب int x أو float y الحاجات دي بتتحط في الstack ومجرد ما الfunction تخلص بتتمسح تلقائي من غير ما انت تعمل أي حاجة
الميزة في الstack إنه سريع جدا بس مشكلته إنه محدود في الحجم ولو زودت عن الحد ده ممكن يحصل Stack Overflow وده بيخلي البرنامج يقع
نيجي بقى للheap
الheap ده يعتبر مكان تخزين مش منظم يعني مش زي الstack اللي مرتب فوق بعض، لأ الheap ممكن البيانات تتخزن في أي مكان فاضي والبرنامج ملوش سيطرة مباشرة عليه لازم تستخدم Pointers علشان توصل ليه
الheap بنستخدمه لما نكون مش عارفين حجم البيانات اللي هنتعامل معاها يعني مثلا لو انت بتاخد input من الUser ومش عارف هو هيكتب قد إيه فبتستخدم الheap علشان تحجز المساحة المطلوبة وانت شغال مش وانت بتكتب الكود
بس المهم إنك لما تحجز مساحة في الheap لازم لما تخلص تستخدمها تمسحها بنفسك، لو ما مسحتهاش هتفضل محجوزة ومحدش هيقدر يستخدمها تاني وده بيعمل حاجة اسمها Memory Leak ودي مشكلة كبيرة لأنها بتخلي البرنامج ياخد مساحة أكتر من اللازم وممكن مع الوقت يهنج أو يقع
يعني باختصار
الstack منظم وسريع بس محدود
والheap مش منظم بس مرن
بس لازم تتحكم فيه كويس علشان مايحصلش مشاكل
الstack مسؤول عن الVariables العادية والFunctions
والheap مسؤول عن الData اللي بتتحجز وقت التشغيل واللي حجمها مش معروف من الأول
الفرق بينهم مش بس في الاستخدام كمان في طريقة التخزين والسرعة واللي بيتحكم فيهم ولو فهمت الفرق كويس هتعرف إمتى تستخدم كل واحد فيهم حسب احتياجك وانت بتبرمج

