Inline function v. Macro in C -- What's the Overhead (Memory/Speed)?
Posted
by
Jason R. Mick
on Stack Overflow
See other posts from Stack Overflow
or by Jason R. Mick
Published on 2011-03-07T23:56:10Z
Indexed on
2011/03/08
0:10 UTC
Read the original article
Hit count: 211
I searched Stack Overflow for the pros/cons of function-like macros v. inline functions.
I found the following discussion: Pros and Cons of Different macro function / inline methods in C
...but it didn't answer my primary burning question.
Namely, what is the overhead in c of using a macro function (with variables, possibly other function calls) v. an inline function, in terms of memory usage and execution speed?
Are there any compiler-dependent differences in overhead? I have both icc and gcc at my disposal.
My code snippet I'm modularizing is:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
My reason for turning it into an inline function/macro is so I can drop it into a c file and then conditionally compile other similar, but slightly different functions/macros.
e.g.:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
(note the difference in the second line...)
This function is a central one to my code and gets called thousands of times per step in my program and my program performs millions of steps. Thus I want to have the LEAST overhead possible, hence why I'm wasting time worrying about the overhead of inlining v. transforming the code into a macro.
Based on the prior discussion I already realize other pros/cons (type independence and resulting errors from that) of macros... but what I want to know most, and don't currently know is the PERFORMANCE.
I know some of you C veterans will have some great insight for me!!
© Stack Overflow or respective owner