c - x86-64 GCC 生成将寄存器移动到自身的代码
问题描述
我尝试在 Compiler Explorer 上编译以下代码:
int index(int *arr, unsigned int i) {
return arr[i];
}
使用x86-64 gcc 11.2
,-O2
生成以下代码:
index(int*, unsigned int):
mov esi, esi
mov eax, DWORD PTR [rdi+rsi*4]
ret
我已经看到了这个答案,它说将寄存器移动到自身是“低效的 NOP”,并被认为是“从非优化编译器生成代码的产物”。
为什么 GCC 会mov esi, esi
在此处生成-O2
?
解决方案
推荐阅读
- swift - 如何在swift 5中更新标记而不重新加载谷歌地图
- android - 应用程序进入后台后自动销毁子片段 - Android
- applescript - 我正在尝试更改 TextExpander 应用程序对象中的属性值,但不能
- opengl - 如何使用从一个 VBO 到另一个 VBO 的数据
- svn - 使用带有挂钩修订的 svn externals。如何从此版本分支
- python - AWS EC2 Python 并行 - 极慢
- python - Dask groupby 在每列上分别给出错误的结果
- java - 查询仅在其子项不为空时返回实体
- r - 有没有办法生成 rmarkdown 文档的缓存版本,然后直接从缓存中生成多个输出?
- java - 如何在 JAVA 中将 Pair 转换为二维数组?