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

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

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

... но это не ответило на мой основной вопрос.

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

Существуют ли какие-либо различия в издержках, зависящие от компилятора? В моем распоряжении есть как 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);

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

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

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

Я знаю, что некоторые из вас, ветераны С, будут иметь отличное понимание для меня !!

Ответы на вопрос(1)

Ваш ответ на вопрос