السلام عليكم ورحمة الله وبركاتة
ساكتب فى الموضوع ولكن ارحب باى تغييرات او اصلاحات لان الفكرة مشوشة عندى .
المصدر
كثيرا من الكتب تقوم بشرح الترتيب الهرمى للمتغيرات وايهم قابل للcasting دون فقد معلومات وايهم لا , ولكن غالبا ما يهملون الحديث عن الpointer cast .
كثيرا من المعالجات قادرة على عنونة البايت الواحد ولكن عند عنونة الاحجام الاكبر (2 و4 فيما اعلى ) يجب ان تكون تلك البيانات مرتبة aligned (مرتبة فى الذاكرة فى عنواين مضاعفة للقيمة 1002 , 1004 مثلا عند حفظ بيانات بحجم 2 byte )
لذلك اذا قمت بعمل cast مثلا لموشر على char لاخر لint فانت بذلك ستجعل المتغير الint الذى يوشر علية int* فى وضع غير aligned (لانة مازال char size aligned ) وهنا عند عمل dereference سيقوم بانتاج bus error
وهناك بعض المقالات الاخرى تقول انها ستوثر على الاداء لان المعالج سيقوم بعمل access للذاكر بنفس طريقة الalign القديمة فسيحضر البيانات على عدة دورات access بدل دورة واحدة وقد يسوء الامر اذا كان المعالج يستخدم الcache
line ولنفترض حجمة 64 بايت و لسوء الحظ البيانات التى تريدها تقع فى نهاية cache line وفى بداية التالى لة فلذلك سيقوم المعالج بعمل كاش ل128 كيلو لعمل احضار لكمية بيانات ضئيلة .