一位朋友写了一个函数,大约300行代码,并问我如何把它变成内联.
我告诉他这太大了,会导致教学通知.然后我想,但他只召唤一次此功能.所以,没有任何缺点.
感觉不对.这是错的吗?
Gcc做了这个优化.静态函数仅在内联后调用.它不能与外部函数一起执行此操作,因为它无法确定谁调用该函数.
你可以通过这里检查汇编程序:
首先是extern函数:
#include <stdio.h>
extern int test(int x);
int main() {
int x = test(10);
printf("%d\n", x);
}
int test(int x)
{
volatile int y = x;
for (int i = 0; i < 10; i++)
y++;
for (int i = 0; i < 10; i++)
y++;
return y;
}
Run Code Online (Sandbox Code Playgroud)
main()的汇编器输出与-O optimization作为编译器标志:
main:
subq $8, %rsp
movl $10, %edi
call test(int)
movl %eax, %esi
movl $.LC0, %edi
movl $0, %eax
call printf
movl $0, %eax
addq $8, %rsp
ret
Run Code Online (Sandbox Code Playgroud)
您可以看到调用了测试,并且EAX中的返回值存储在$ 0中.
现在让测试静态,并观察测试的调用消失,代码是内联的.
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |