لماذا 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 للهيكل أكبر من مجموع أحجام الحقول؟
هذا ليس خطأ، بل خاصية من خصائص عمل المعالج والمترجم تُسمى