Я искал 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, дадут мне отличную информацию !!