做"代码调整优化"项目时,打算把一些函数放到ops,但师兄突然说 内联函数 放到ops会失去内联的效果(即:编译时不会被展开),自己专门看了下相关的资料。
收获如下:
a.c作为一个测试文件,内部使用了内联函数
详细步骤如下:
一:
gcc -O -o main a.c
其中的-O表示编译优化,如果不加,则编译时不会进行内联。
二:
objdump -D main > dump.txt
-D 表示反汇编
三:
利用grep 函数名 dump.txt 查看 该函数是否展开。 若没有查到,则说明 内联函数 被展开; 反之 则没有展开。
结论:
1 内联函数中有循环时, 还有效果,即: 编译时可以展开; 但是内部有递归或者内部有malloc时,就不能被展开
2 在动态ops中声明内联函数,也没有效果,(即不能被展开)
2 在静态ops中声明内联函数,有效果,(即可以被展开