09-02-2015, 01:54 PM
إقتباس :ماذا يقصد بـ 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-}إقتباس :فهمت ؟ استفسار ؟Type
Switch
Syntax
{$A+}, {$A-}, {$A1}, {$A2}, {$A4}, {$A8} or {$A16} {$ALIGN ON}, {$ALIGN OFF}, {$ALIGN 1}, {$ALIGN 2}, {$ALIGN 4}, {$ALIGN 8} or {$ALIGN 16}
Default
{$A8} {$ALIGN 8}
Scope
Local
docwiki.embarcadero.com/RADStudio/XE7/en/Align_fields_(Delphi)

