الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هى مخلفات الذاكره

مغلق
بدأه net_code في 8 أغسطس 2005 · 19 رد · 1,774 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كنت بنفذ الكود الأتى فى السى
 

# include<stdio.h>
void main()
{
int a; 
printf("%d\n",a);
}

أنا فى البرنامج محطتش قيمه للمتغير a :lol:
و المفاجأه أنى لقيت قيمه طلعت فى شاشة التنفيذ :wacko:
و لما سألت قالولى أنها مخلفات الذاكره :wacko:
فأيه هى مخلفات الذاكره و بتيجى إزاى

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 28 مارس 2014 في 21:13 — السبب: add tags

لا تراجع و لا إستسلام

#2

الذاكرة تتكون من بتات bits, كل بت يا اما يكون فيه 0 او 1 (لا يوجد خيار ثالث .. مثلا ان لا يكون فيه شيء)

لذلك لو تحاول قراءة اي مكان في الذاكرة .. ستجد بعض القيم الموجودة هناك.

انت الان لما سجلت المتغير, هذا المتغير راح في مكان في الذاكرة (في هذه الحالة, في الـ stack), هذا المكان في الذاكرة به قيمة عشوائية (لا نعرفها)

من اين جائت هذه القيمة؟

ممكن تكون جائت من اي مكان .. ممكن مثلا كان في برنامج يستخدم هذا الجزء من الذاكرة قبلك .. او شي من هذا القبيل.

المهم ان هذه القيم العشوائية من اكبر مصادر الاخطاء البرمجية, لذلك يجب دائما ان تعطي للمتغيرات قيمة اولية, يعني initialize your varaibles

مثلا

int x = 0;
#3

شكرا على الرد

اقتباس
(في هذه الحالة, في الـ stack)

ماهو الstack بالضبط

و لماذا فى هذه الحاله ؟

وشكرا على مساعدتك

تم تعديل هذه المشاركة بواسطة net_code في 8 أغسطس 2005 في 12:31

لا تراجع و لا إستسلام

#4

الـ stack هو جزء من الذاكرة .. هو حقيقة برة الموضوع شوية, و يمكن صعب اشرحه لاني لا اعرف كل شيء عنه .. و لكن:

هو جزء من الذاكرة يستخدم لتخزين المتغيرات المحلية في الدوال function local variables و يستخدم ايضا على ما اظن لتخزين الرجسترات عند استدعاء دالة جديدة ..

طبعا ما اتصور انك فهمت شي من السطرين السابقين .. بس اذا تريد شوف منتدى الاسمبلي, اعتقد انك قد تجد شرحا له هناك.

#5

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

الان مالفرق بين الـSTACK المستخدم في اسمبلي والمستخدم في الـ DATA STRUCTUR ?

دمتم في رعاية الله

#6

مخلفات الذاكرة:

عندما تفتح برنامج وتغلقة يبقى بالذاكرة القيم القديمة لكن المؤشر إلى هذة الدالة غير محجوز فتعتبر المساحة السابقة حرة

لذلك في البرامج الكبيرة التي تدعم نظام إدارة الذاكرة تجد أن الدالة memset كثيرة الإستخدام لملاء المتغيرات بالقيمة صفر

وكذلك لغات البرمجة الجديدة تدعم ذلك تلقائياً أي عندما تعرف متغير يتم تصفيرة تلقائياً

أما stack لا تهم معرفة إلا لصانعي المترجمات compiler وكذلك دارسي data structre

#7

شكرا على ردكم و لقد أستفدت

لكن ده خطر علشان ممكن الواحد يعتمد على مكان فى الذاكره به قيم سابقه

فستصبح النتائج خاطئه

على العموم شكرا على المساعده

لا تراجع و لا إستسلام

#8

فهد علي

الان مالفرق بين الـSTACK المستخدم في اسمبلي والمستخدم في الـ DATA STRUCTUR

في الاساس Stack هو جزء من هياكل البيانات التي قمت بدراستها في الكورس Data Structure

مصممين النظم و المترجمات واللغات استخدموا صفاته في التعامل مع الذاكرة كما ذكر حسن صفاته .

انا بستخدمه في الالعاب في عمليات التنقل بين حالات اللعبة push main_menu_state و لما تنتهي اقوم بعمل pop main_menu_state و ادخل علي اللعبة بـ push Level_1 و هي جميعهم دوال .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#9

ال stack هو المكدس بشكل عام و هو ذاكرة من نوع lifo و تعني last in first out يستخدم لتمرير المتغيرات و لحفظ العناوين و استرجاعها عند الرجوع من subroutine باستخدام الاوامر call و return. و من اشهر الاوامر لاستخدام المكدس هي ما ذكرها الاخ احمد صالح push و pop حيث احدها تخزن و الاخرى تسترجع.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#10

اضيف لما قاله الاخوه ان اداره الذاكره هو مايميز لغه السى عن غيرها من الغات الكثيره التى لا تدعم

المؤشرات

كالبيسك والجافاوغيرها

تصميم كافة انواع المواقع البرامج بافضل الاسعار

aaasamy7@hotmail.com

الاسكندريه -مصر

ت:5749981

#11

شكرا جزيلا على ردودكم و التى أستفدت بها كثيرا

بالنسبه للstack

الأمر push و pop من أوامر الأسمبلى

فما هى أوامر التعامل مع المكدس فى السى

لا تراجع و لا إستسلام

#12

هل ادارة الذاكرة حقا ميزة في السي؟ (شوية خارج الموضوع)

في الجافا ادارة الذاكرة تتولاها اللغة نفسها (الكومبايلر و الـ garbage collector)

بينما في السي بلص بلص مثلا, فجزء كبير من ادارة الذاكرة متروك للمبرمج (الـ heap) مما يسبب عرقلة للمبرمج .. فبدل ان يهتم بتطوير البرنامج .. سيكون عليه متابعة الذاكرة و ادارتها.

ادارة الذاكرة من قبل المبرمج ليست ميزة في معظم انواع التطبيقات .. اللهم الا في برمجة الانظمة و ما شابه ..

و هذا هو السبب اللذي يجعل سي هي اللغة المناسبة لبرمجة الانظمة (بعكس جافا مثلا), و لكن معظم انواع البرامج و التطبيقات في الحياة العملية هي ليست من ذلك النوع ..

#13

هي ميزة لكنها خطرة جداً ومعقدة

صحيح أنها تمكنك من العديد من الميزات وتكون أنت من يتحكم بالذاكرة

ولكنها تحتاج الكثيرمن الخبرة لكونها متابعة لحياة المؤشرات الموجودة في برنامجك كلها .. هو أمر ليس بالسهل

إذا علمنا أن العديد من البرامج الكبيرة تعاني من تسريب في الذاكرة...

وكذلك تحد من فعالية الصيانة والتطوير وشكرا

#14

طبعا لغة السى لغه عريقه

و ميزتها فى إدارة الذاكره فعلا مهمه (أنا عن نفسى لا أثق إلا فى ما أفعله بيدى)

و لكن عند برمجة البرامج المعقده

على ماأظن ستكون إدارة الذاكره بها صعوبه

لا تراجع و لا إستسلام

#15

شكرا جزيلا على ردودكم و التى أستفدت بها كثيرا

بالنسبه للstack

الأمر push و pop من أوامر الأسمبلى

فما هى أوامر التعامل مع المكدس فى السى

هذا يقوم بها المترجم و لكن هناك كلمة في مترجم فيجول تسمي stdcall_ تقوم بتمرير البارمترات من اليسار إلي الايمين ( إن لم تخن الذاكرة ) .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#16

عند كتابة التالي

int x ;

يتم حجز موقع في ذاكرة قسم البيانات ذات حجم 4 بايت

و يطلق على هذا الأسم x

هذا السطر int x = 0 ;

يقوم بتصفير هذه المواقع قبل الإستخدام

و لكن ذاكرة الكومة تستخدم فقط مع المؤشرات

و أعتقد إنها غير المكدس تماما

سلام :D

#17

الذاكره دائماً مليانه

حتى لو لم نقم بعمل أي برنامج

#18

شكرا على ردودكم و معلش ردى جه متأخر علشان أنا كنت مبدخلش على النت

Desigen كتب:
و لكن ذاكرة الكومة تستخدم فقط مع المؤشرات

و أعتقد إنها غير المكدس تماما

أيه قصدك؟؟

و إذا لم تكن مكدس فما هى ؟؟

و شكرا

لا تراجع و لا إستسلام

#19
char ch = 'A'; 
char * pch = & ch;

الجمل السابقة هي عبارة عن إستخدام بسيط للمؤشرات

فالمؤشر يدل على مكان عنصر معين من نفس نمط المعطيات

مؤشر محرف يدل على مكان محرف

موشر رقم يدل على مكان رقم

.....

في الأولى عرفنا ch و أعطيناها المحرف A

و هذا المكان في كتلة البيانات

أما في الثانية عرفنا مؤشر إلى محرف

و هنا المؤشر يؤشر إلى عنوان محرف

و بالتالي إستخدمنا & لكي ترجع العنوان

و يمكن إستخدام السطر

delete [] pch;

حيث يحذف المؤشر و لا يبقى له وجود

سلام

#20

شكرا على التوضيح و يجعله بإذن الله فى ميزان حسناتك

لا تراجع و لا إستسلام

هذا الموضوع مغلق.

مواضيع مشابهة