المشاركات : 29
المواضيع 3
:
: 0
الإنتساب : Mar 2011
في مراجع دلفي ذكر ان const parameter يتصرف نفس value parameter ، بماذا يتشابها وبماذا يختلفان ولماذا ينصح استخدام const مع السلاسل الحرفية ؟
في حالة اذا كانت القيمة التي تم تمريرها إلى الاجراء قيمة عددية هل يتم نسخها إلى stack كما يحصل عند التمرير بالقيمة pass by value ؟
المشاركات : 632
المواضيع 66
:
: 6
الإنتساب : Jul 2010
حتى تفهم الفكرة جيدا يجب ان تعرف طريقة التمرير ب ال var ..
عندما تمرر متغير ك var فانت في الحقيقة تمرره كمؤشر .. لذلك عند تغييره داخل اجراء خارجي .. ستتغير قيمته .
اما عند التمرير ك const فالكومبايلر سيقوم بعمل نسخة من المتغير في ال stack فقط اذا كان طول نوع المتغير اكبر من 4 بت او 8 بت للنظامين 32 بت و 64 بت على التوالي ..
هناك عامل اخر وهو calling convention : في حالة stdcall سيتم تجاهل طول النوع variable type ويتم دفع المتغير مباشرة في ال stack .
عند التعامل مع السلاسل النصية ينصح العديد من المبرمجين بتمريرها ك const وارجاع القيمة ك return تفاديا لمشاكل الوصول للذاكرة عند استخدام التمرير ك var ،فمؤشر المتغير يمكن ان يؤشر على مكان في الذاكرة قد تم تحريره مسبقا بتدخل من المبرمج او من الكومبايلر .
ان لم تكن على دراية بطريقة تنظيم الذاكرة .. فسيكون التمرير ك const خيار جيدا .
اما ان كان المبرمج على دراية بذلك .. فيستطيع التمرير بالاسلوب الذي يناسبه .
+ تمرير سلسلة نصية ك var من ال heap افضل و أأمن بكثير .
Open Your Source .. Open Your Mind
المشاركات : 975
المواضيع 50
:
: 218
الإنتساب : Feb 2008
السلام عليكم يمكن
الرد يساعدك ان شاء الله
التمرير بالـ var ما هو الا تمرير مؤشر دلفي حريص على اخفاء تعاملك بالمؤشرات
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
المشاركات : 29
المواضيع 3
:
: 0
الإنتساب : Mar 2011
أخ smp3 هل من الممكن ارفاق مثال بسيط يوضح ما شرحته
المشاركات : 632
المواضيع 66
:
: 6
الإنتساب : Jul 2010
amer12 كتب :أخ smp3 هل من الممكن ارفاق مثال بسيط يوضح ما شرحته
أعتذر أخي .. لا يمكنني ان ارفق مثال حاليا ..
انا اتصفح المنتدى من الجوال ..
ممكن فيما بعد ..
Open Your Source .. Open Your Mind