Я читал, что с помощью встроенных функций, где бы ни выполнялся вызов функции, мы заменяем вызов функции телом определения функции.
Согласно приведенному выше объяснению не должно быть никакого вызова функции, когда inline
это пользователь.
Если это так Почему я вижу три call
инструкции в ассемблерном коде?
#include <iostream>
inline int add(int x, int y)
{
return x+ y;
}
int main()
{
add(8,9);
add(20,10);
add(100,233);
}
meow@vikkyhacks ~/Arena/c/temp $ g++ -c a.cpp
meow@vikkyhacks ~/Arena/c/temp $ objdump -M intel -d a.o
0000000000000000 <main>:
0: 55 push rbp
1: 48 89 e5 mov rbp,rsp
4: be 09 00 00 00 mov esi,0x9
9: bf 08 00 00 00 mov edi,0x8
e: e8 00 00 00 00 call 13 <main+0x13>
13: be 0a 00 00 00 mov esi,0xa
18: bf 14 00 00 00 mov edi,0x14
1d: e8 00 00 00 00 call 22 <main+0x22>
22: be e9 00 00 00 mov esi,0xe9
27: bf 64 00 00 00 mov edi,0x64
2c: e8 00 00 00 00 call 31 <main+0x31>
31: b8 00 00 00 00 mov eax,0x0
36: 5d pop rbp
37: c3 ret
Полный дамп объектного файла Вот
Смотрите страницу 28 из:
http://www.cs.princeton.edu/courses/archive/spr04/cos217/lectures/Assembler.pdf