السلام عليكم ورحمة الله
مرحبا بكم في أخترنا لك(3)
الفهرس الرئيس لــ سلسلة أخترنا لك فى سي++
3.تحسين حجم ذاكرة لاعضاء الفئة بترتيب الاعلان عن المتغيرات
أن حجم size يمكن ان يتغير ليس بزيادة عدد الاعلان عن المتغيرات الاعضاء ولكن فقط بتغيير ترتيبهم فى الفئة:
struct A
{
bool a;
int b;
bool c;
}; /*ان حجم هيكل البيانات == 12 بايت*/على الجهاز الخاص بي فأن sizeof (A) يساوي 12 بايت . قد تكون هذة النتيجة مفاجئة لأن الحجم الاجمالى لــ A يساوي 6 بايت اى 1+4+1 = بايت. السؤال الآن من إين آتت الــ 6 بايت الاخري؟ الاجابة ان المترجم يدرج 3 بايت كمحاذاة بعد كل متغير عضو بولوني bool حتي يجعل موقعة محاذي فى الــ 4 بايت. بأمكانك تقليل حجم هيكل البيانات بتنظيم المتغيرات الاعضاء كالتالي:
struct B
{
bool a;
bool c;
int b;
}; // الآن حجم B يساوي 8 بايت فقط أى مربعين من الذاكرة كل واحد مكون من 4 بايتفى هذة الحالة فأن المترجم بدرج 2 بايت محاذاة بعد المتغير العضو c . لان حجم b يساوي 4 بايت اي انها تساوي عدد 1 متغير من نوع word بمقاييس لغة المعالج(الاسمبلي) اذا لاتحتاج الى اى بايت اضافي لضبط المحاذاة.
الكود والمخرجات:
#include <iostream>
using namespace std;
struct A {
bool a;
int b;
bool c;
}; /*sizeof (A) == 12*/
struct B {
bool a;
bool c;
int b;
}; // sizeof (B) == 8
int main() {
struct A a;
struct B b;
cout << "Size of A: " << sizeof (a) << endl;
cout << "Size of B: " << sizeof (b) << endl;
return 0;
}المخرجات:
Size of A: 12 Size of B: 8
هل مر على احدكم فكرة متعلقة بتحسين استخدام الذاكرة؟
والى لقاء فى تلميح واخترنا لك جديدة ان شاء الله

