我在Stack Overflow中搜索了类似函数的宏与内联函数的优缺点.
我发现了以下讨论: C中不同宏函数/内联方法的优缺点
......但它没有回答我的主要问题.
也就是说,在内存使用和执行速度方面,使用宏函数(带有变量,可能还有其他函数调用)和内联函数的开销是多少?
开销中是否存在编译器相关的差异?我同时拥有icc和gcc.
我模块化的代码片段是:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
我将其转换为内联函数/宏的原因是我可以将其放入ac文件中,然后有条件地编译其他类似但略有不同的函数/宏.
例如:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
(注意第二行的差异......)
这个函数是我的代码的核心功能,在我的程序中每步调用数千次,我的程序执行数百万步.因此,我希望尽可能减少开销,因此我浪费时间来担心内联的转换,将代码转换为宏.
根据之前的讨论,我已经意识到宏的其他优点/缺点(类型独立性和由此产生的错误)...但我最想知道的,目前不知道的是性能.
我知道你们中的一些C老兵会对我有一些很好的见解!