ورود

View Full Version : تابع inline



SilentCloud
سه شنبه 16 آبان 1385, 17:15 عصر
دوستان سلام
من تازه عضو شدم آشنایی زیاد با سایت ندارم می شه یا تابع inline رو برام بطور واضح توضیح بدین یا اگه توی سایت هست لینکش رو برام بذارین؟
مرسی

ارام فارسی
یک شنبه 21 آبان 1385, 17:39 عصر
ببین فرض کن که توی برنامت یک تابع داری. کامپایلر وقتی که به تابع میرسه یک کپی از اون رو تهیه میکنه .زمانی که اجرای برنامه از mainشروع میشه اگر برنامه به دستور فراخوانی تابع برسه به همان کپی گرفته شده از تابع مراجعه میکنه و دستور العمل هاش رو اجرا میکنه.ببین اگه بخوام ساده و خلاصه بگم،هنگام مراجعه به کپی تابع عملیات جامپ و خیلی عملیات های هزینه بر دیگه صورت میگیره.حالا فرض کن اگر تابع دو خط دستور العمل داشته باشه وتوی برنامه 47 بار فراخوانی بشه برنامه باید متحمل چه هزینه ی سنگینی بشه! البته شما که پشت کامپیوتر نشستید و فقط مینویسید و تماشا میکنید متوجه این هزینه نمیشید!
چاره چیه؟ اگر در مورد توابعی که تعداد دستورالعمل هاشون کمه و تعداد فراخوانیشون زیاد شما این توابع رو به صورت inlineتعریف کنید کامپایلر به جای اینکه یک کپی از اون ها تهیه کنه و هر بار هنگام فراخوانی جامپ بشه ،در برنامه هر کجا که به فراخوانی تابع رسید،یک کپی از اون رو به خود برنامه میچسبونه.با این کار هنگام رسیدن به دستور فراخوانی دیگر جامپی صورت نمی گیرد و اجرای برنامه با سرعت تر میشود.
البته این نکته را بخاطر داشته باش که تابعی که بصورت inlineمعرفی میکنی دارای اون دوتا خصوصیت باشه.
همچنین در اخر خوبه یه چیز رو بدونی که اصلا در خواست نمودن تابع به صورتinline از طرف برنامه نویس ضروری نیست . چون خود کامپایلر حتی اگر شما تابع رو inlineتعریف نکنی اما لازم باشه اون رو به صورت inlineدر میاره.

SilentCloud
جمعه 26 آبان 1385, 14:01 عصر
توضیحت واقعا عالی بود بالاخره بعد از مدتها معنی تابع inline رو واقعا فهمیدم ممنون

Stanford
پنج شنبه 14 دی 1391, 17:06 عصر
چاره چیه؟ اگر در مورد توابعی که تعداد دستورالعمل هاشون کمه و تعداد فراخوانیشون زیاد شما این توابع رو به صورت inlineتعریف کنید

بنده این تعبیر رو بهینه ترش می کنم، اینجا دو تا مسئله پیش میاد که بهتره اینجوری بگیم:

1) اگر در مورد توابعی که تعداد دستورالعمل هاشون کم و تعداد فراخوانیشون زیاد شما این توابع رو به صورت inlineتعریف کنید،

2) اگر در مورد توابعی که تعداد دستورالعمل هاشون زیاد و تعداد فراخوانیشون کم شما این توابع رو به صورت inlineتعریف کنید،

این هم علت داره چون وقتی که کامپایلر به توابع inline میرسه بدنه تابع inline شده رو به داخل برنامه کپی می کنه و اگر تعداد فراخوانی تابعی که inline تعریف شده زیاد باشه باعث میشه که تعداد کپی هایی که کامپایلر به داخل برنامه انجام میده بالا بره و در نتیجه ی این، حجم کد بالا میره و حجم کل برنامه هم بالا خواهد رفت.

که عموماً مورد شماره 2 بیشتر استفاده می شه.

atrin-hojjat
پنج شنبه 14 دی 1391, 21:58 عصر
1)وقتی تابعی رو با دستور inline مینویسی میتونی اون رو قبل از main() بنویسی.
2)همونطور که بقیه هم گفتند این دستور برای توابعی که زیاد فراخوانی میشوند مناسب نیست.

#include <iostream>
#include <conio.h>
usig namespace std;
inline int max(int a,int b)
{
return a>b?a:b;
}
/***********************/
int main(){
cout<<"max of 10,20 is:<<max(10,20)<<endl;
getch();
return 0;
}