Я просмотрел Переполнение стека для функций "за" / "против" функций, подобных макросам. встроенные функции.
Я нашел следующее обсуждение: Плюсы и минусы различных макрофункций/встроенных методов в C
... но он не ответил на мой основной вопрос.
А именно, каковы накладные расходы c использованием макрофункции (с переменными, возможно, другими вызовами функций) v. встроенной функцией с точки зрения использования памяти и скорости выполнения?
Существуют ли зависящие от компилятора различия в накладных расходах? У меня есть как icc, так и gcc в моем распоряжении.
Мой фрагмент кода, который я модулю:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Моя причина превратить его в встроенную функцию/макрос, поэтому я могу записать его в файл c, а затем условно скомпилировать другие подобные, но несколько разные функции/макросы.
например:.
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
(обратите внимание на разницу во второй строке...)
Эта функция является центральной для моего кода и вызывается тысячами раз на шаг в моей программе, и моя программа выполняет миллионы шагов. Таким образом, я хочу, чтобы НАЛИЧИЕ накладные расходы были возможны, поэтому я теряю время, беспокоясь о накладных расходах, связанных с вложением v. Преобразование кода в макрос.
Основываясь на предыдущем обсуждении, я уже понимаю другие плюсы и минусы (тип независимости и возникающие из этого ошибки) макросов... но то, что я хочу узнать больше всего, и в настоящее время не знаю, это ПРОИЗВОДИТЕЛЬНОСТЬ.
Я знаю, что некоторые из вас, ветераны C, получат отличное представление для меня.