![]() |
|
لماذا نستعمل packed عندما نعرف نوع ؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : لماذا نستعمل packed عندما نعرف نوع ؟ (/showthread.php?tid=6766) |
لماذا نستعمل packed عندما نعرف نوع ؟ - مهند الرسيني - 08-02-2015 السلام عليكم ورحمة الله وبركاتة لماذا نستخدم التعليمة packed عندما نعرف الأنواع , فأنا أراها في بعض الكلاسات تستعمل والبعض الأخر ﻻ لذلك سؤالي ماذا تعمل و وأين تستعمل ؟ هذه أحد الأمثلة التي وجدتها في أحد الكلاسات : PHP كود : TBGRAPixel = packed recordكذلك يوجد نقطة آخرى وهي PHP كود : $PackRecords وهذا مثال وجدته عليها PHP كود : {$PackRecords 1} إقتباس :http://lazarus-ccr.sourceforge.net/fpcdoc/ref/refsu15.html ملاحظة : أستعمل Lazarus لماذا نستعمل packed عندما نعرف نوع ؟ - الكاسر الآخر - 08-02-2015 الفر بين Record العادي و Packed Record أن الأخير حجمه بالبايت أقل من الأول حتى لو قمت بحجز نفس أنواع البيانات ونفس عدد المتغيرات فملا كود : type c = Packed Record
a : Integer;
b : String[4];
End;
type x = Record
a : Integer;
b : String[4];
End;كود : procedure TForm8.Button1Click(Sender: TObject);
var s : c;
s1 :x;
begin
ShowMessage(IntToStr(SizeOf(s))+' - '+IntToStr(SizeOf(s1)))
end;لماذا نستعمل packed عندما نعرف نوع ؟ - مهند الرسيني - 09-02-2015 جويت خيراً على التوضيح , ولكن في هذا السطر : إقتباس :Free Pascal supports also the ’packed record’, this is a record where all the elements are byte-alignedماذا يقصد بـ byte-aligned ؟ لماذا نستعمل packed عندما نعرف نوع ؟ - محمد عبد العزيز - 09-02-2015 إقتباس :ماذا يقصد بـ byte-aligned ؟محاذات حجم الحقل/المتغير/البيانات aligns data تابع، هذا جزء من الكود بأول مشاركة يقوم بتعريف نوع جديد Trec2 كود : Type
Trec2 = Record
A : Byte;
B : Word;
end;كود : var
V1:Trec2;تقول A من نوع Byte حجمه 1 و B من نوع Word حجمه 2 هو ما يساوي 1+2 اي 3 Bytes حروف بالذاكرة الى هنا كل شيئ عادي... لا، خطأ، اذا استخدمنا SizeOf لمعرفة الحجم ستكون النتيجة 4 الCompiler سيقوم بمحاذات حجم المتغر A من 1 الى 2 ويصبح الحجم 2+2 يساوي 4 لماذا قام الCompiler بذلك ؟ لان التعامل معها 4 اسرع من التعامل معها ك3 وهذا ما يدخل في باب الOptimization لان التعامل مع البيانات المحاذات اسرع! الان جرب ما يلي، ضف الى الشيفرة المصدرية قبلها او الاسن فوقها كلها ما يلي كود : {$Align Off}يعني الCompiler لم يقم بالمحاذات عندما تكتب Packed فانك ترشد الCompiler ان يستخدم اصغر حجم ممكن وبالتالي لا يقوم بالمحاذات كود : {$Align On} هي نفسها {$A+}
{$Align Off} هي نفسها {$A-}إقتباس :فهمت ؟ استفسار ؟ لماذا نستعمل packed عندما نعرف نوع ؟ - Amer12 - 10-02-2015 استاذ B.M.AbdelAziZ لماذا لا تقوم بكتابة كتاب يتحدث عن أساسيات لغة دلفي - باسكال ، لعلنا نستفيد من خبرتك الكبيرة في هذا المجال. لماذا نستعمل packed عندما نعرف نوع ؟ - مهند الرسيني - 10-02-2015 فبتالي نسنتنتج انه إذا اردت عمل محاذات سيتم إستهلاك الرام اكثر .. بينما يرجع ذلك بالفائدة على سرعة التعامل مع المتغيرات في الذاكرة داخل الـ cpu والعكس صحيح ؟ لماذا نستعمل packed عندما نعرف نوع ؟ - محمد عبد العزيز - 10-02-2015 إقتباس :لماذا لا تقوم بكتابة كتاب يتحدث عن أساسيات لغة دلفي - باسكالصراحة كنت قد شرعت في الكتابة لاوبل اتفقت مع احد دور النشر لنشر الكتاب لكنني لم اكمله في المدة المحددة، كان هذا قبل صدور XE وبما انني لم اعد اتابع اصدارات دلفي الجديدة لم اكمل. إقتباس :والعكس صحيح ؟نعم، فقط الهدف ليس الذاكرة الحية RAM الCompiler يقوم بعمل Optimization للكود الناتج اما للحجم Code Size او السرعة Speed وليس الاثنين معا طبعا هناك استثناءات وحالات خاصة، اتحدث عن الِِِCompiler عامة وليس دلفي أو Free Pascal |