读书人

inline函数没展开

发布时间: 2013-02-17 10:44:46 作者: rapoo

inline函数没有展开
今天学习了MD5算法的C源码,里面的几个关键函数是用宏定义的。
因为看过Effective C++,作者建议用内联函数代替宏定义的函数,所以我就写了个相应的版本。

inline UINT32 F(UINT32 x, UINT32 y, UINT32 z) { return (((x) & (y)) | ((~x) & (z))); }

inline void FF(UINT32 &a, UINT32 b, UINT32 c, UINT32 d, UINT32 x, UINT32 s, UINT32 ac)
{
a += F(b, c, d) + x + (UINT32)ac;
a = ROTATE_LEFT(a, s);
a += b;
}

但是我用Ollydbg调试了一下,发现生成的汇编代码并没有展开,还是call形式的,到网上查了一下,有网友说inline只是建议编译器进行展开处理,并不是强制的。
我又用了__forceinline关键字,但发现还是不能展开。
请问如何强制内联呢?

我使用的编译器是VC++ Express 2012 c++ 内联函数 inline
[解决办法]
把优化选项打开,查查有没一个控制展开规模的选项,如果有的话,设一个比较大的值。

一定要确保强制内联就用宏好了。任何事都是有利有弊,适合需求就好。
[解决办法]
inline为优化而生,如果不开优化,是不会做展开的,即使开了优化,也需要编译器觉得展开有利而且能够展开,才会展开。
[解决办法]
http://msdn.microsoft.com/en-us/library/19z1t1wy%28v=vs.71%29.aspx
[解决办法]
引用:
引用:是debug还是release版本的?

引用:把优化选项打开,查查有没一个控制展开规模的选项,如果有的话,设一个比较大的值。

一定要确保强制内联就用宏好了。任何事都是有利有弊,适合需求就好。

我用命令行编译的, 没有使用任何编译选项. 如果要展开是不是要开启什么选项……

-O3 试试

读书人网 >C++

热点推荐