Встроенная функция v. Макрос в C - Какие накладные расходы (память / скорость)?

Я искал Stack Overflow на предмет плюсов и минусов функционально-подобных макросов и встроенных функций.

] Я нашел следующее обсуждение: Плюсы и минусы различных макросов / встроенных методов в C

... но он не дал ответа на мой главный животрепещущий вопрос.

А именно, каковы накладные расходы в c при использовании макрос-функции (с переменные, возможно, вызовы других функций) v. встроенная функция с точки зрения использования памяти и скорости выполнения?

Есть ли какие-либо различия в накладных расходах, зависящие от компилятора? В моем распоряжении есть и icc, и gcc.

Мой фрагмент кода, который я модулирую, таков:

double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution += 
   4 * Epsilon * (RepulsiveTerm - AttractiveTerm);

Моя причина превращения его во встроенную функцию / макрос состоит в том, чтобы я мог поместить его в файл ac, а затем условно скомпилировать другой похожие, но немного другие функции / макросы.

например:

double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution += 
   4 * Epsilon * (RepulsiveTerm - AttractiveTerm);

(обратите внимание на разницу во второй строке ...)

Эта функция является центральной в моем коде и вызывается тысячи раз за шаг в моя программа и моя программа выполняют миллионы шагов. Таким образом, я хочу иметь НАИМЕНЬШИЕ накладные расходы, поэтому я трачу время, беспокоясь о накладных расходах на встраивание v. Преобразование кода в макрос.

На основании предыдущего обсуждения я уже понимаю другие плюсы и минусы (независимость от типов и вытекающие из этого ошибки) макросов ... но то, что я хочу знать больше всего, и в настоящее время не знаю, - это ПРОИЗВОДИТЕЛЬНОСТЬ.

Я знаю, что некоторые из вас, ветераны C, дадут мне отличную информацию !!

33
задан Community 23 May 2017 в 12:34
поделиться