مشاهده نسخه کامل
: کدنویسی بهینه
با سلام
یه مشکل عمده توی برنامه ها بهینه بودن کد هستش که بعضی وقتها حتی با کوتاه بودن کد هم اشتباه میشه
بعضی از این مباحث توی ساختمان داده مطرح میشه که بیشتر به مربوط به الگوریتم میشه اما خود کد هم روشهایی برای بهینه سازیشون هست که کم کم خدمدتون عرض میکنم
البته این روشها مربوط به c++ هستش و پاره ای از اونها عمومی حساب میشن
بهینه سازی c++
این هینه سازی ها روشهایی آسان برای استفاده در کدهای موجود و آتی برای افزایش سرعت برنامه میباشد.
بهرحال این مطلب را به خاطر داشته باشید که سریعترن کد, کدی است که فراخوانی نمیشود.
استفاده از لیست مقداردهی *
همیشه برای مقدار دهی سازنده ها از لیست مقدار دهی استفاده کنید. برای مثال
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به جای
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بدون لیست مقدار دهی متغیرهای سازنده پیش فرض پشت پرده فراخوانی شده سپس عملگر مقدار دهی فراخوانی میشود. با لیست مقدار دهی فقط سازنده کپی فراخوانی میشود.
بهینه سازی حلقه ها *
هر جایی که امکان دارد از حلقه پایین شمار استفاده کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به جای
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در هر حلقه شرط صفر بودن حلقه سریعتر است
همچنین
i++
از کد
++i
در قسمت سوم حلقه سریعتر است
استفاده از int
همیشه از نوع اینت به جای کاراکتر یا وع شورت استفاده کنید.این نوع یک نوع داده بومی برای ماشین است
rf.ariyapoor
09-08-2008, 18:18
بسیار بسیار ممنون بحث بسیار جالبی هست حتما ادامه بده ما شدیدا مشتاقیم
hamed valizadeh
09-08-2008, 20:04
بله (نظر قبلی)
لطفا کد هارو در سمت چپ و در داخل تگ Code قرار بدین.
من یک دونشونم نتونستم بخونم. :(
سلام
آقا حامد چشم
ویرایش شد
همیشه توابع محلی را به صورت استاتیک تعریف کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به منظور جلوگیری از دیده شدن توابه در خارج از فایل کد شما.البته بعضی کامپایلر ها توانایی این بهینه سازی را به طور خودکار دارا میباشند
بهینه سازی عبارت شرطی *
به عقب برگشتن در عوض پرش
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در عوض
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده از عملگر شرطی مناسب برای به عقب برگرداندن یک مطلب در عوض پرش از ناحیه کد به ناحیه دیگر
البته این نوع شرط در بعضی مواقی کاربرد دارد . برای فهم بهتر رجوع کنید به مباحث محل در مباحث سیستم عامل.
در ضمن برای داشتن کد با بهترین سرعت از روشهای شی گرایی محض باید اجتناب شود.
برای مطالعه بیشتر (کتاب سیستم عامل . ویلیام استالینگز)
بهینه سازی ساختار سویچ
ساختار های case که عمومیتر هستند و بیشتر احتمال رخ دادن آنها وجود دارد در ابتدا قرار دهید
از عملگرهای پرهزینه دوری کنید
عملگر جمع از عملگر ضرب کم هزینه تر و عملگر ضرب از تقسیم کم هزینه تر است .تا جای ممکن از عملگر های پرهزینه دوری کنید.
مقدار دهی هنگام تعریف متغییر
تا جای ممکن در هنگام تعریف متغییر مفدار دهی را انجام دهید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در عوض
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تعریف سپس مقدار دهی تابع سازنده پیش فرض را فراخوانی میکند و سپس اپراتور مقدار گزاری را.مقدار دهی هنگام تعریف از کپی سازنده استفاده میکند
ارسال آرگومان توسط ارجاع
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
عوض
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
rf.ariyapoor
10-08-2008, 01:05
دستتون درد نکنه
یه سوال داشتم
چرا بهتره که توابع محلی رو static تعریف کنیم؟
سلام
یک تابع عضو استاتیک با یک کلاس مرتبط است نه با یک شی . یک عضو استاتیک را میتوانید در هر جایی برای عاملیت یا برای داده استفاده کنید بدون نیاز یه کپی شدن در تمام آبجکت ها.
یک فایده دیگر اینکه میتوانیم با عضو های استاتیک تعداد اشیا را شمارش کنیم
یکی رو هم که همون بالا (حوزه دید) گفته بودم
hamed valizadeh
10-08-2008, 12:38
سلام
اگه میشه و دخالت در کارتون نمیشه درباره بهینه سازی ورودی و خروجی منم یه پست بدم؟
آقا حامد خواهش میکنم
فروم یه جاییه برای تبادل نظر .
منتظر بودم تا دیگران هم در این کار منو کمک کنن.امید وارم دوستان دیگه هم به ما ملحق بشن
Mina Mehdizadeh
10-08-2008, 18:14
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من نفهمیدم ()undoBar چیکار میکنه ؟؟؟؟؟....فهمیدم به جای else به کار رفته ولی نفهمیدم همیشه میشه ازش استفاده کرد ؟؟؟؟
سلام
مینا خانوم این مساله رو بهتره با یه مثال بگم
فرض کنین شما میخواین یه عدد به عنوان ماه از سال بگیرین.این عدد نباید بزرگتر از 12 باشه.دو صورت میتونین این کنترل رو داشته باشین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با توجه به اینکه در روش دوم پدیده محل بهتر حفظ میشه کد سرعت بیشتری داره
استفاده از روش عملگر و مقدار دهی
البته سمش یادم رفته دقیفا چیه
بهتره از روش زیر
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به جای
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده کنیم.چونکه در این روش یک شی موقتی ساخته نمیشه
قرار دادن توابع کوچک به صورت inline ش
این مطلب توی کتابها توضیح داده شده.
استفاده از اشیای بینام
تا جای ممکن از توابع بینام استفاده کنید.مثلا
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سرعت بیشتری از
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
داره
در روش دوم اشیا و پارامتر های ارسالی از share memory استفاده میکنند
hamed valizadeh
10-08-2008, 21:20
این هم مقاله بهینه سازی ورودی و خروجی که گفته بودم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
hamed valizadeh
10-08-2008, 21:54
سلام
مینا خانوم این مساله رو بهتره با یه مثال بگم
فرض کنین شما میخواین یه عدد به عنوان ماه از سال بگیرین.این عدد نباید بزرگتر از 12 باشه.دو صورت میتونین این کنترل رو داشته باشین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدو
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبا توجه به اینکه در روش دوم پدیده محل بهتر حفظ میشه کد سرعت بیشتری داره
سلام
من اول رو حرفتون شک داشتم برا همین یه برنامه نوشتم که هر دفعه 10^7 با کار های بالا رو انجام میداد و وقتی 100 بار هر برنامه رو اجرا کردن و وقتی میانگین ها رو با هم مقایسه کردم زمان کد دوم بیشتر بود؟
میانگین کد اول = 0.26247 ثانیه برای 10^7 بار
میانگین کد دوم = 0.2818 ثانیه برای 10^7 بار
آقا حامد طبیعتا باید این طوری باشه.
اینجا کل کد ما 100بایت هم نمیشه. کدی با این اندازه تو خود ثبات cpu هم جا میشه. همون طور که گفتم یه مثال برای متوجه شدن چگونگی کارکرد این مساله هستش.
ثانیا اگه کد ما بیشتر هم باشه به خاطر اینکه شما توی حلقه تست میکنین بازم روش اول یعنی با استفاده از شرط و نقض شرط سرعت بیشتری داره. سیستم عامل استالینگز (ص 375)
همون طور که گفتم این کد مربوط میشه به مبحث محل و پراکندگی در سیستم عامل که توی سیستم های امروزی توی کدهای حجیم کارساز هستش.
مراجعه شود : مدیریت حافظه قطعه بندی ؛ کتاب دکتر فهیمی
به نوشته آقای استالینگز هم باید کمترین انشعاب رو از کد داشته باشیم (ص321) که البته توی کد اولی هم که من نوشته بودم هم رعایت نشده. البته این بهینه سازی رو من از یک مقاله آز آقای اندرو وینتر خوندم.خود ایشون هم ذکر کرده بودن که نسبت به شرایط با تصمیم گیری درست پرش رو در کد کم کنین.
اما بازم سعی میکنم مثال و کد بهتری که کارایی این روش رو نشون بده براتون بذارم.
در ضمن از مقاله خیلی خوبتون در مورد توابع ورودی و خروجی ممنونم. توصیه میکنم بقیه هم حتما مطالعه کنن.
یه چیزی هم تا یادم نرفته:بیشتر این بهینه سازی هارو و و روشهای خیلی بهتر و بیشتر رو کامپایلر های امروزی مثل
vc200X,borland c boulder 2005,7,...
خودشون انجام میدن برای همین قصد دارم تااز این به بعد روشهای بهینه کردن کد در سیستم های توکار و بیدرنگ رو عرض کنم.البته بیشتر اینها از مقالات هستش
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.