С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Инлайн-функция замедляет работу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Даны шесть различных чисел. Определить максимальное из них http://www.cyberforum.ru/cpp-beginners/thread834829.html
Даны шесть различных чисел. Определить максимальное из них. (Определить функцию, находящую максимум из двух различных чисел.) Еще одна подобная тема, и последуют санкции.
C++ Выяснить является ли хоть одно из данных чисел палиндромом(перевёртышем) Даны 2 натуральных числа выяснить является ли хоть одно из них палиндромом(перевёртышем) тоесть таким числом десятичная запись которого читается одинаково слева на право и справо на лево.(определить... http://www.cyberforum.ru/cpp-beginners/thread834825.html
C++ Лучшие ресурсы в Интернет - разработчикам C++
Все источники широко известны - но тем не менее: http://strongcpp.blogspot.ru/2013/04/c.html
C++ Получить все шестизначные счастливые номера
Получить все шестизначные счастливые номера. Счастливым называют такое шестизначное число, в котором сумма ею первых трех цифр равна сумме его последних трех цифр. (Определить функцию для расчета...
C++ перегрузка оператора вычитания строк http://www.cyberforum.ru/cpp-beginners/thread834812.html
#include "stdafx.h" #include <string.h> #include <iostream> using namespace std; class Stroka{ char str; int len;
C++ Что быстрее, операция присваивания или сравнения? Всем доброго времени суток, такой вод у меня дурацкий вопрос сидит в голове, "Что быстрее, операция присваивания или сравнения?". Вот конкретная задача, почему я это спрашиваю: Пишу приложение в... подробнее

Показать сообщение отдельно
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
13.04.2013, 13:22
Цитата Сообщение от IcyWind Посмотреть сообщение
Спасибо за интересные пояснения) под "ручным упоминанием" вы имеете ввиду?
inline void func()
то, что для обычной функции было бы её вызовом, но
C++
1
2
3
4
5
6
7
8
9
10
11
12
inlune void f()
{
};
....
for (i=1; i<1000000000; ++i)
{
 f();//это считаем за одно, а не миллиард, так как оно только однажды прописано вручную
};
...
f(); // это тоже считаем
...
f(); // и это считаем отдельно
. Итого в этом тексте функция упомянута трижды, а выполнится 1000000002 раза. Считаем, сколько раз она упомянута, а не сколько раз выполнится.

Добавлено через 4 минуты
Цитата Сообщение от IcyWind Посмотреть сообщение
Насколько меня учили, нормальные современные компиляторы с включённой оптимизацией всегда стараются инлайнить функцию в код.
Не всегда. Чем больше инлайнов, тем больше программа, а большая программа при прочих равных работает медленнее, так как:
1. Меньшая её доля помещается в кеш.
2. Она нуждается в большем количестве подгрузок страниц с диска.
Поэтому и стараются инлайнить в первую очередь короткие функции, так как это мало влияет на общий размер. Но при этом учитывается и частота вызовов, и их количество, так как на количество (в примере на 3) идёт умножение размера функции.

Добавлено через 5 минут
Если функция вызывается ровно в одном месте, она должна быть заинлайнена не зависимо длины самой функции, числа шагов цикла, в который она вложена и шагов цикла внутри самой функции, так как размер от этого не вырастет, а пара вызов/возврат сократится. Но если даже маленькая функция в пару строк вызывается в миллиарде различных строк, инлайнить её во все эти строки нельзя, тогда надо смотреть, куда именно заинлайнить выгодней, возможно вообще отказаться от инлайна.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.