реклама на сайте
подробности

 
 
> Оптимизация встраивания функций, для чистых функций
neiver
сообщение Dec 21 2010, 07:43
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Доброго всем времени суток.

Имеется чистая функция - принимает один целочисленный параметр и возвращает результат, который зависит только от этого параметра. Никаких побочных эффектов - казалось-бы идеальный кандидат для встраивания. В большинстве случаев в эту функцию передаются константные параметры и редко переменные. Хочется, чтобы при передаче константного параметра, функция встраивалась и выполнялась константная подстановка (вызов функции заменялся вычисленным во время компиляции значением), а при передачи переменной происходил честный вызов функции. Компиляторы семейства GCC именно так и делают. Компиляторы IAR ведут себя по другому: если функция вызывается с константными параметрами больше определённого порогового числа раз, то компилятор генерирует тело этой функции и перестаёт её встраивать везде, даже где это выгодно. #pragma inline=forced помогает не сильно, так как функция встраивается всегда, в том числе при переменных аргументах, когда это не выгодно. Иными словами, функция или всегда встраивается, или всегда вызывается. GCC, как я уже говорил принимает решение о встраивании функции для каждого ее упоминаия в исходном тексте.

Кто-нибудь знает как добиться желаемого поведения от компиляторов IAR?

Всё описанное справедливо, вероятно, для всех компиляторов семейства IAR. По крайней мере, для платформ ARM, AVR & MSP430.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Dec 21 2010, 08:20
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



То есть, вы хотите, чтобы одна и та же функция либо встраивалась, либо нет в зависимости от контекста?
Первый раз о таком слышу.
Или я неправильно понял?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 21 2010, 08:48
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ Dec 21 2010, 14:20) *
То есть, вы хотите, чтобы одна и та же функция либо встраивалась, либо нет в зависимости от контекста?
А почему бы и нет?

Цитата(Xenia @ Dec 21 2010, 14:33) *
Это не поможет. Компилятор не обязан вычислять значения функций. Например, даже если вы запишите sin(0.5), то не ожидайте, что компилятор станет вычислять синус в момент компилляции. Функция, он функция и есть.
Это можно ожидать. Многие компиляторы так давненько поступают.
Это из оперы:
http://en.wikipedia.org/wiki/Constant_folding


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 02:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016