۲ بار انجام میشه .
مثلا اگر فرض کنید که تابع 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 هستند .