ورود

View Full Version : سوال: آدرس دهی محلی در حافظه



maarek
جمعه 23 مهر 1395, 20:11 عصر
سلام تابع bind (https://msdn.microsoft.com/en-us/library/windows/desktop/ms737550(v=vs.85).aspx) در هدر Winsock سه تا آرگومان داره، آرگومان دوم آدرس محلی از حافظه است که متغیر ساختمان sockaddr_in در انجا تعریف شده است.. سوال من در رابطه با کد زیر :


bind(sohandle,(struct sockaddr*)&sock_serv,sizeofsocket)

آرگومان دوم اینطوری تعریف کرده (struct sockaddr*)&sock_serv میشه یه توضیح کوتاه بدید ؟ چرا sockaddr* داخل پرانتز هست و یه sock_serv هم بیرون پرانتر هست چطوری مقدار رهی میشه ؟ :متفکر:

Desaghi
سه شنبه 27 مهر 1395, 14:41 عصر
sock_serv متغییری است که یک آدرس از اشاره گر به sockaddr را در خود ذخیره می کند.:متعجب:

maarek
چهارشنبه 28 مهر 1395, 08:30 صبح
واقعا ؟


چرا sockaddr* داخل پرانتز هست و یه sock_serv هم بیرون پرانتر هست چطوری مقدار رهی میشه ؟ :متفکر:

جوابش رو یکی از دوستان تو فروم دیگه داد..

https://en.wikipedia.org/wiki/Type_punning


یعنی اگه دو تا استراتکت باشن که تو خونه های حافظه یکسان از نظر حجم جا بشن میشه بدون اینکه از متغیرهای اضافی استفاده کرد مقادیر رو به اصطلاح padding کرد یعنی چی؟
مثلا یه متغیر ۶۴ بیتی رو در نظر بگیر که مثلا کل ۶۴ بیت رو پر کرده حالا از توی این متغیر میتونی ۲ تا متغیر ۳۲ بیتی یا ۴ تا متغیر ۱۶ بیتی در بیاری بدون اینکه مثلا بخوای از اعمال ریاضی یا شیفت استفاده کرده باشی. این کار رو برای بهینه کردن سرعت کد استفاده میکنن.
این روش رو اصطلاحا بهش میگن ماله کشی نوع داده که بیسیک چندریختی تو شی گرا میشه.