آیا استفاده ۲ بار از یک عبارت optimize میشود ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آیا استفاده ۲ بار از یک عبارت optimize میشود ؟

+4 امتیاز

سلام 

آیا توی کد زیر  a+func یکبار محاسبه میشه ؟!‌‌ یا هر ۲ بار مقایسه انجام میشه ؟

int a;

b= (a+func())+4+(a+func())

 اگر a شی از کلاس باشه چی ؟

سوال شده شهریور 2, 1393  بوسیله ی مسعود سعادتی (امتیاز 26)   1 4

1 پاسخ

+4 امتیاز
 
بهترین پاسخ

۲ بار انجام میشه .

مثلا اگر فرض کنید که تابع func به این صورت باشه :

int func (void)
{
    static int var = 0;
    var++;
    return var;
}

۱ بار صدا زدن تابع مقدار صفر رو برمیگردونه و صدا زدن بعدی مقدار ۱ و بعدی ۲ و .....

پس اگر بخواهیم یک بار مقدار func رو حساب کنیم و هنگام صدا زده شدن دوباره func مقدار قبلی رو جاش بگذاریم ، نتیجه برنامه نادرست میشه .

در مورد بهینه سازی ها هم برمیگرده به Compiler و اینکه چقدر قدرت بهینه سازی داره .

این ۲ بار صدا زده شدن تابع func و خواندن/نوشتن متغییر a باعث ایجاد Cache-Hit میشه .

یعنی :

اولین صدا زدن تابع func چون که داخل Cache نیست از RAM خوانده میشه و به داخل Instruction Cache برده میشه که این عملیات کندی است .

اولین خواندن/نوشتن متغییر a هم چون داخل Cache نیست از RAM خوانده میشه و به داخل Data Cache برده میشه و این عملیات هم کند است .

ولی در بار دوم هم عملیات خواندن/نوشتن و اجرا کردن متغییر a و تابع func خیلی سریعتر انجام میشه چون داخل Cache هستند .

پاسخ داده شده شهریور 3, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد شهریور 4, 1393 بوسیله ی BlueBlade
...