الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن ال Struct وطريقة تركيبه بعد عمل ال Optimization عليها

بدأه mandareka في 13 مارس 2009 · 5 رد · 546 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندما يقوم الكمبايلر بعمل Optimization على كود السي أو السي بلس بلس

هل يقوم بإجراء تغييرات على بيانات Struct

(إعادة ترتيب المتغيرات أو إزالة غير المستخدم منها أو أي شيء آخر)

وهل يوجد اختلاف بين مصممين الكمبايلرات على طريقة التعامل مع الكود التالي وطريقة الحجز في الذاكرة

  1. struct {
  2. char a:1;
  3. char b:2;
  4. int c:6;
  5. } r;  
  6.  
  7.  

أطيب تحياتي...............!!

تم تعديل هذه المشاركة بواسطة mandareka في 14 مارس 2009 في 00:32

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#2

UP Please!!!

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#3

هل سؤالي يحتاج للتوضيح؟!!

للرفع أيضاً

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#4

ألسلام عليكم ورحمة الله وبركاته

يقوم بعمل تغييرات فيما يخص الalignment

ويمكنك تغيير ذلك عن طريق pragma directive او اعدادات المترجم

#5

وعليكــم السـلام ورحمة الله وبركاتـه..

كما ذكر الأخ Mudokon ، الموضوع متعلق بAlignment بمعنى أن لكل متغير حدود يجب أن يضع فيه ،، فمثلا المتغير من نوع short يحتاج الى أن يوضع في حدود 2 بايت القادمه .. وlong يوضع في حدود الlong ( ال4 بايت التاليه) وهكذا .. وبالتالى قد تضيع مساحه سابقه في حال مثلا كان المتغير الأول حرف (1 بايت) ثم المتغير التالي long ( بحجم 4 بايت) وهنا سيتم وضع المتغير الlong في العنوان الرابع .. وبالتالى تكون هناك 3 بايت غير مستفاد منها ..

انظر للمثال التالي :

#include <iostream>
using namespace std;

struct A {
	char a; long b;
	char c; long d;
};

struct B {
	char a; char c;
	long b; long d;
};

struct C {
	long b; long d;
	char a; char c;
};


#pragma pack(push,1)
struct D {
	char a; long b;
	char c; long d;
};
#pragma pack(pop)

int main (int argc , char* argv[]) {
	cout << "Size of A : " << sizeof(A) << " Bytes " << endl;
	cout << "Size of B : " << sizeof(B) << " Bytes " << endl;
	cout << "Size of C : " << sizeof(C) << " Bytes " << endl;
	cout << "Size of D : " << sizeof(D) << " Bytes " << endl;

	return (0);
}

A في الذاكره ، سوف يكون بهذا الشكل :

العنوان ، المحتوي

------------------------

00 char a

01 stuffing

02 stuffing

03 stuffing

04 long b, byte 0

05 long b, byte 1

06 long b, byte 2

07 long b, byte 3

09 char c

10 stuffing

11 stuffing

12 stuffing

13 long b, byte 0

14 long b, byte 1

15 long b, byte 2

16 long b, byte 3

أما B سوف يكون بهذا الشكل :

العنوان ، المحتوي

------------------------

00 char a

01 char b

02 stuffing

03 stuffing

04 long b, byte 0

05 long b, byte 1

06 long b, byte 2

07 long b, byte 3

09 long b, byte 0

10 long b, byte 1

11 long b, byte 2

12 long b, byte 3

وC سوف يكون عكس الشكل السابق ،،

أما D سوف يكون بهذا الشكل :

العنوان ، المحتوي

-----------------------

00 char a

01 long b, byte 0

02 long b, byte 1

04 long b, byte 2

05 long b, byte 3

06 char c

07 long d, byte 0

08 long d, byte 1

09 long d, byte 2

10 long d, byte 3

وكان هناك نقاش جميل في أحد مواضيع الأخ خالد على ما أذكر تحدث فيه عن هذا الموضوع ،، يمكنك البحث عنه ،،

للمزيد :

Byte Alignment and Ordering

بالتوفيق :) .

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 17 مارس 2009 في 06:43

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#6

مشكورين اخواني الكرام وبارك الله فيكم

تحياتي العطرة

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

مواضيع مشابهة