Wednesday, January 6, 2010

C/C++ дээр байдаг inline түлхүүр үгийн үүрэг

Сэдэвтэй холбоотой нийтлэл тул блогоосоо копи паст хийв.

Функцийн амин чухал үүргүүдийн нэг нь санах ойг хэмнэх байдаг. Өөрөөр хэлбэл функцийг дуудах бүрийд програмын удирдлага нэг л газар очдог бөгөөд функц дуудагдах тоогоор програмд давтагдан бичигдэхгүй гэсэн үг юм. Функц дуудах командад хүрмэгц удирдлага функцийн эхлэлийн команд дээр харайж очих бөгөөд, харин функц ажиллаад дуусахад удирдлага буцаж дуудсан газраа ирдэг.
Функц хэдийгээр санах ойг хэмнэх сайн талтай ч маш олон дуудагдах тохиолдолд програмын хурдад муу нөлөө үзүүлэх боломжтой. Өөрөөр хэлбэл тэр бүрийд шаардлагатай регистрүүдийг стект хийх, аргументүүдийг мөн хадгалах, удирдлагыг шилжүүлэх, буцах бүрийдээ регистрүүдийг сэргээх, удирдлага буцаах зэрэг үйлдлүүд хийгдэнэ.
Биелэлтийн хурдыг нэмэгдүүлэхийн тулд функцийг дотоод функц болгох боломжтой байдаг. Энэ юу гэсэн үг вэ гэхээр ийм функц нь програмыг хөрвүүлэх буюу компайлдах үед функцыг дуудсан газар бүрт нь функцрүү чиглүүлсэн удирдлага шилжүүлэх командыг биш харин уг функцын командуудыг шууд орлуулан бичдэг. Том хэмжээтэй функцүүдийн хувьд энгийн аргаар зохион байгуулах нь илүү байж болох юм. Харин цөөн тооны коммандуудаас тогтсон функцүүдийг дотоод биш болгон зохион байгуулах нь санах ойн хувьд ч бараг хэмнэлтгүй (алдагдалтай ч байж болно), хурдны хувьд ч алдагдалтай байж магадгүй. Нэг програмд тун олон удаа давтагдан орж байгаа бага хэмжээний бүлэг үйлдлийг функц болголгүй дахин давтан бичих нь програмын хурдыг нэмэх боловч програм дэндүү нүсэр бүтэцтэй ойлгомж муутай болох аюултай. Ийм л тохиолдолд дотоод функцийг ашиглах нь зүйтэй. Дараах жишээнд дотоод функцийг ашиглаж үзүүлсэн байна.
#include <iostream>
using namespace std;
inline float lbsToKg(float pounds)
{
return 0.453592*pounds;
}
int
main(void)
{
float lbs;
cout << "Jingee oruul (funteer) :";
cin >> lbs;
cout << "Tanii jin (kilogramaar) :"
<< lbsToKg(lbs);
}

Дотоод функцийг тодорхойлохын тулд inline гэсэн түлхүүр үгийг функцийн тодорхойлолтод хэрэглэх хэрэгтэй. Харин функцийн урьдчилсан тодорхойлолт биш, жинхэнэ биеийг нь үндсэн програмаас өмнө тодорхойлж өгсөн байх ёстой. Уг функцийн биеийг програм дотор шууд орлуулан ашиглах ёстой учраас ийм шаардлага бий болж байна. Энэ тохиолдолд функцийн урьдчилсан тодорхойлолт шаардагдахгүй.

No comments: