Вградени функции (вградени) за тези, които не знаят, и за тези, които са забравили, Intel® софтуер

Поставянето на аргумента в комин, предавателната функция за контрол и да се върне от него, освобождаването на стека - всичко това прави разходите, които са леко, но влияят на скоростта. Можете да получите победа във времето, ако дадете на компилатора да копирате функция код директно в програмния код на обаждащия се, вместо да се създава функция в паметта. Тези функции се наричат ​​вградени (вградено).







Един тривиален пример за вградена функция разговор:


Трябва да се отбележи, че в ред - само препоръка, а не команда на компилатора да замени разговори нейните функции на тялото. Тя може да се изчисли вмъкването на неподходящо и просто да се игнорира модификатора на инлайн и лечение на функцията, както обикновено. Така че това се каза, всичко волята на компилатора. (Прибл. В Windows има __forceinline модификатор. Което кара компилатор за вграждане на функцията)

Защо понякога е по-добре да се игнорира модификатор инлайн?
Нека да видим как вградени функции могат да повлияят на някои функции на програмата.

скорост:

  • по-бързо - въвеждането на функцията код в кода на програмата, ще помогне да се избегне използването на ненужни регулации (свързани с извикване на функция и да се върне от него)
  • бавно - прекалено честото използване на вградени функции на една и съща големи, ще доведе до разширяване на кода (в допълнение към това, компилаторът понякога принудени да използват повече временни променливи, за да се запази семантиката), които могат да доведат до изоставане, т.е. непрекъснато се изисква в процеса на операционната система програма за грундиране на нови страници

Размерът на изпълнимия файл:

  • увеличаване - както вече бе споменато, прекалено честото използване на вградени функции на една и съща големи, ще доведе до разширяване на кода и, съответно, увеличаване на размера на изпълнимия файл
  • намалено - благодарение на оптимизиране компилатор изпълним размер може да бъде намален с помощта на много малки функции вградени като съставител без да е необходимо да се създаде "екстра" инструкции, за да се обаждат и на излизане от, в помещенията на аргументи от стека и обратно. Също така по време на изпълнението на големи вградени функции в кода на програмата за оптимизиране компилатор да премахнете излишни код, което от своя страна може да намали размера на файла.







Подхлъзване (бой):

  • увеличаване - прекалено честото използване на вградени функции на една и съща големи, ще доведе до разширяване на код, който може да доведе до изоставане, т.е. непрекъснато се изисква в процеса на операционната система програма за грундиране на нови страници
  • намаляване - може да намали количеството на виртуални страници на паметта да бъде в памет едновременно. Например, когато е () е функция функция г (). функционални кодове могат да са в различни страници от виртуалната памет, с въвеждането на кода ж компилатор функция () в кода на функцията F (). често и двете функции, че кодът е на същата страница

Умножение дефинирани
Компилаторът да вмъкнете кода функция в организма, само ако тялото й е в текущата единица превод. По този начин, вградените функции трябва да бъдат определени във всеки превод единица, в която те се използват, че не ми харесва свръзката.
така наречените слаби (слаби) героите са били създадени, за да се реши този проблем. След като свръзката установи, че едно от тези знаци, а останалите ще бъдат игнорирани. Дори ако компилаторът игнорира модификатора, споразумението ще бъде успешен.
Поради модификатор инлайн. функция характер става слаб характер. така че можете спокойно да поставите функцията инлайн в един * .h файл и да го използвате в различни преводни единици.
например:

г ++ test.cpp -С
г ++ test1.cpp -С
г ++ test.o test1.o -о // вградени без грешка "множествена определение" на

Е, какво с макроси?
Имайте предвид, че макросите се обработва предварително и съставител инлайн функции. Тъй като макроси, не се виждат на компилатора, те са по-трудни за отстраняване на грешки.
Вградени функции са наясно с обхвата и правят тип на тест, за разлика от макроса.
Вградени функции могат да бъдат претоварени член функции, определени модели и имат и други предимства, които не са налични макроси.

Кой знае за модификатора Inline?
Модификатор поддържа C ++, C99, GNU В. Освен това, всички стандарти работят с различни модификатор.

По този начин,
1) за подходящи използват вградените функции могат да подобрят производителността и намаляване на размера на изпълнимия файл.
2) Може (и трябва) се определя в различни преводни единици
3) в унисон функция се получава една значителна икономия в сравнение с нормалната функция, тя трябва да бъде с малък размер.
4) компилаторът пак ще направи всичко, модификатор инлайн е само намек. Той може да се игнорира модификатора къде е и да го поставите, където тя не съществува.

За повече информация относно възможностите на компилатора оптимизации, вижте нашите условия за оптимизация.