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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Вопрос по встраиваемым функциям - C++

12.01.2009, 02:45. Просмотров 664. Ответов 8
Метки нет (Все метки)

В книге прочитал, что если объявить функцию как inline, то код самой функции при компиляции копируется в главную программу, а в конце добавлено, что ключевое слово inline служит для компилятора рекомендацией скопировать код функции, и компилятор волен проигнорировать эти рекомендации и обращаться как обычно.
То есть, можно всегда писать inline, а компилятор сам определит наиболее эффективный способ.
Я правильно понял?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2009, 02:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по встраиваемым функциям (C++):

Не разберу скан кода по встраиваемым функциям - C++
У Дейтлов есть код: Что может быть написано в области, которая выделена мной красной рамочкой?

Вопрос по функциям - C++
Вопрос по функции. мне надо, чтобы моя функция "proverka" принимала значение переменной boo. но на простое присвоение компилятор...

Вопрос по функциям - C++
Скажите, если у функции в заголовке прописано, что она возвращает значение int: int function(...) { ...} То могу ли я пытаться...

Вопрос по функциям - C++
Есть функция: int fun(char wob, unsigned char s, char name, char opis, uint32_t code) {} Я вызываю её в одном месте приложения: int...

Вопрос по классам и функциям - C++
Здравствуйте, вообщем мне надо реализовать примерно такое дело: имеется класс the_class нужно чтобы у каждого экземпляра была...

Вопрос по функциям класса - C++
class vector { private: double x; double y; double z; public: vector(); vector(double a, double b, double c); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
12.01.2009, 03:42 #2
Я правильно понял?
впрынцыпе да.
То есть, можно всегда писать inline, а компилятор сам определит наиболее эффективный способ.
нуу может и можно inline писать где попало , но не нужно так как ето скорей всего приведет к увелечению исполняемого файла(твоей проги). и потом inline нужно использовать в критических участках кода...
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
13.01.2009, 02:23  [ТС] #3
Спасибо!
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94
26.02.2012, 10:18 #4
У меня аналогичный вопрос. Могут ли компиляторы встраивать функции со ссылочными и указательными аргументами? Если да, то будет ли встраивание при этом происходить как-то иначе?
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
26.02.2012, 13:08  [ТС] #5
А какая разница, какой тип имеют аргументы. Параметры в функции чаще всего передаются через стек. При встроенной функции в стек ничего передаваться просто не будет.

Кроме того, иногда в стек параметры могут не передаваться вообще даже при невстроенных функциях.

Например,

C++
1
2
3
4
5
6
7
8
void __declspec(noinline) func(char * str) {
    ...
}
 
int main() {
    func("abc");
    return 0;
}
Если дизассемблировать программу, то можно увидеть:

Assembler
1
2
3
4
5
6
7
8
9
...
// main
call        foo
...
 
// func
...
mov         eax,offset string "abc"
...
А параметры в этом случае перадаются по указателю.

Добавлено через 3 минуты
Если убрать __declspec(noinline), то в некоторых случаях эта функция автоматически будет встроенной.

А работа с параметрами происходит аналогично:
Assembler
1
2
3
4
// main
...
mov         eax,offset string "abc"
...
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94
26.02.2012, 14:16 #6
Занимательно, жаль только что я не шарю в ассемблере Но суть ответа более-менее понятна. А есть более-менее простой способ программно проверить, встроилась при выполнении моя функция или нет?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.02.2012, 14:17 #7
Bredorub, дизассемблер?
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94
26.02.2012, 20:04 #8
Цитата Сообщение от fasked Посмотреть сообщение
дизассемблер
Ладно, разберемся...
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
27.02.2012, 01:41  [ТС] #9
Цитата Сообщение от Bredorub Посмотреть сообщение
Занимательно, жаль только что я не шарю в ассемблере Но суть ответа более-менее понятна. А есть более-менее простой способ программно проверить, встроилась при выполнении моя функция или нет?
Как сказал fasked, только дизассемблер. В некоторые среды разработки, например, MSVS, дизассемблер уже встроен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 01:41
Привет! Вот еще темы с ответами:

Алюанский вопрос по функциям - C++
Господа и прекрасные дамы...!!! Решил заняться программированием на досуги...книжки умные почитал..примеры освоил.. Но остановился...

Задачи по функциям. Объясните задачу по функциям) - C++
Вводится последовательность из N целых чисел. Для каждого числа последовательности вывести новое число, которое получится после записи цифр...

Расписать по функциям - C++
Я совершенный новичок. Начали проходить функции, решил задачу, осталось выписать ее по функциям. Подсобите кто опытный, что бы я в...

Консультация по функциям - C++
Подскажите что это за две функции и что за аргументы у второй? cin.clear(); cin.ignore(256, '\n');


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2012, 01:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru