c - x86_64 gcc 调试模式:为什么加减法中有额外的指令?
问题描述
我写了以下片段。
int Add(int x, int y) {
return x+y;
}
int Subtract(int x, int y) {
return x-y;
}
int main() {
bool flag = false;
int x=10,y=5,z;
if (flag) {
z = Add(x,y);
}
else {
z = Subtract(x,y);
}
}
但是当我查看生成的汇编代码时,该函数Add
有一条额外的指令。
0000000000000000 <_Z3Addii>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 89 75 f8 mov %esi,-0x8(%rbp)
a: 8b 55 fc mov -0x4(%rbp),%edx
d: 8b 45 f8 mov -0x8(%rbp),%eax
10: 01 d0 add %edx,%eax
12: 5d pop %rbp
13: c3 retq
0000000000000014 <_Z8Subtractii>:
14: 55 push %rbp
15: 48 89 e5 mov %rsp,%rbp
18: 89 7d fc mov %edi,-0x4(%rbp)
1b: 89 75 f8 mov %esi,-0x8(%rbp)
1e: 8b 45 fc mov -0x4(%rbp),%eax
21: 2b 45 f8 sub -0x8(%rbp),%eax
24: 5d pop %rbp
25: c3 retq
我觉得类似的指令序列(如Subtract
)会起作用。我错过了什么?
解决方案
推荐阅读
- php - Laravel 7 - 包含永远返回错误
- java - 在 Kotlin 数据类上的每个反射都找不到 Java 注释
- python - 变换计数连续整数
- javascript - 带有简单 OpenLayers 地图的本地 HTML 文件不会在 IOS 中打开,但会在所有其他平台上打开
- javascript - NestJS - 带有 ID 的路由返回 404
- unit-testing - 进行跨平台测试
- reactjs - React Algolia 搜索未返回任何命中
- java - 如何使用 spring data r2dbc 验证实体?
- arrays - 查找元素并在传递代码时渲染
- groovy - 从 pytest 生成 Jenkins 流水线阶段