Междупроцедурна оптимизация

Теорията на междупроцедурните оптимизации се разработва активно и в момента. Най-разпространените съвременни транслатори рядко прилагат сложни междупроцедурни оптимизации. Една от причините това да бъде така е, че най-разпространените в момента езици за програмиране (Си и Си++) са от твърде ниско ниво и затрудняват или дори правят невъзможна междупроцедурните оптимизации.

Един от най-често прилаганите видове междупроцедурни оптимизации е автоматичното компилиране на функции и методи като inline. Компилаторите прилагат различни евристики за да „отгатнат“ дали ще е подходящо дадена функция или метод да бъдат компилирани inline; това не винаги зависи само от размера на функцията или метода. Обикновено подобни оптимизации са ограничени в рамките на един файл от изходния код на програмата — ако извикаме функция, дефинирана в друг файл (и значи компилирана в друг обектен модул), тя едва ли ще бъде компилирана автоматично като inline.

Поздсказка

За да подпомогнем компилатора, понякога се постъпва по следния начин. След като програмата стане готова, събираме целия програмен код в рамките на един дълъг файл и я компилираме наведнъж. Така компилаторът има много по-добри шансове да компилира повече функции и методи като inline.

Друг вид междупроцедурни оптимизации позволяват компилаторът сам да се „досеща“ и автоматично да поставя ключовите думи const и restrict навсякъде, където е възможно. Методи, обявени като virtual, може да се компилират напълно или частично статично свързани. Въз основа на начина, по който дадена функция или метод се използва, се преценява най-оптималното разпределение на аргументите в регистрите на процесора. При езици от по-високо ниво са възможни и много други междупроцедурни оптимизации. Ако ефективността обаче е важна, а програмираме на Си или Си++, засега не може да разчитаме, че компилаторите ще оптимизират автоматично по този начин.