Avatar ·

لماذا sizeof للهيكل لا يساوي مجموع sizeof لأعضائه؟

مرحبًا أيها الزملاء! أنا مبتدئ في C++ وقد واجهت مؤخرًا سلوكًا غير متوقع. لدي هيكل بسيط: ```cpp struct MyStruct { char a; // 1 بايت int b; // 4 بايت short c; // 2 بايت }; ``` من المنطقي افتراض أن sizeof(MyStruct) سيكون 1 + 4 + 2 = 7 بايت. ولكن عندما أطبع الحجم باستخدام `std::cout`، يظهر المترجم 12 بايت! لماذا هذا؟ فأنا لا أستخدم أي دوال افتراضية أو وراثة. لقد اختبرت على مترجمات مختلفة (GCC, MSVC) — النتيجة نفسها في كل مكان. ومع ذلك، إذا قمت بتغيير ترتيب الحقول، تتغير النتيجة. على سبيل المثال، إذا وضعت `int` أولاً، يصبح الحجم 8 بايت. ما هذا السحر؟ هل هو خطأ في المترجم أم أنني أغفل شيئًا؟ اشرحوا لي، من فضلكم، كيف يعمل sizeof للهياكل وكيف يمكن توقع الحجم الفعلي. شكرًا مقدمًا! <<>>

لماذا sizeof للهيكل أكبر من مجموع أحجام الحقول؟

هذا ليس خطأ، بل خاصية من خصائص عمل المعالج والمترجم تُسمى