如何证明 inline的函数 在编译阶段就被替换成代码段了?

wu453973171 2017-09-07 02:47:09
RT
我在 vs 里面 实验了一下

代码如下


inline int g_fun(int i , int j)
{

//int ca = 111,jj =12,aa =1,ddd=2,ff =3,gg= 4,hh= 5,jjs = 6,kkk = 7;
return i + j;
}


int main()
{

/*int i = 10, j = 19;
int * pI = &i;*/
//int * p = new int(77);
g_fun(10, 12);
return 0;
}






按道理 应该不会生成 call 指令 进行跳转 可是还是生成了
inline 看编译器的脸
那我要怎么才能证明呢inline 是不会生成call 指令的呢




14: int main()
15: {
00E11800 55 push ebp
00E11801 8B EC mov ebp,esp
00E11803 81 EC C0 00 00 00 sub esp,0C0h
00E11809 53 push ebx
00E1180A 56 push esi
00E1180B 57 push edi
00E1180C 8D BD 40 FF FF FF lea edi,[ebp-0C0h]
00E11812 B9 30 00 00 00 mov ecx,30h
00E11817 B8 CC CC CC CC mov eax,0CCCCCCCCh
00E1181C F3 AB rep stos dword ptr es:[edi]
16:
17: /*int i = 10, j = 19;
18: int * pI = &i;*/
19: //int * p = new int(77);
20: g_fun(10, 12);
00E1181E 6A 0C push 0Ch
00E11820 6A 0A push 0Ah
00E11822 E8 DD F8 FF FF call g_fun (0E11104h)
00E11827 83 C4 08 add esp,8
21: return 0;
00E1182A 33 C0 xor eax,eax
22: }



00E11822 E8 DD F8 FF FF call g_fun (0E11104h)
...全文
129 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧