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