Форум программистов, компьютерный форум CyberForum.ru

Инлайн-функция замедляет работу - 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++ Что быстрее, операция присваивания или сравнения? Всем доброго времени суток, такой вод у меня дурацкий вопрос сидит в голове, "Что быстрее, операция присваивания или сравнения?". Вот конкретная задача, почему я это спрашиваю: Пишу приложение в Builder, на форме есть несколько edit-ов, храню булевскую переменную, у которой устанавливаю значение в true если на каком-либо из edit-ов произошло событие onchenge, перед тем как присвоить, я сравниваю,... подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
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 минут
Если функция вызывается ровно в одном месте, она должна быть заинлайнена не зависимо длины самой функции, числа шагов цикла, в который она вложена и шагов цикла внутри самой функции, так как размер от этого не вырастет, а пара вызов/возврат сократится. Но если даже маленькая функция в пару строк вызывается в миллиарде различных строк, инлайнить её во все эти строки нельзя, тогда надо смотреть, куда именно заинлайнить выгодней, возможно вообще отказаться от инлайна.
 
Текущее время: 11:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru