linux – 为什么gcc会生成详细的汇编代码?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 为什么gcc会生成详细的汇编代码?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1373字,纯文字阅读大概需要2分钟。
内容图文
![linux – 为什么gcc会生成详细的汇编代码?](/upload/InfoBanner/zyjiaocheng/954/fadf0a403827457f97a2cca4dbf6d85e.jpg)
我对GCC生成的汇编代码有疑问(-S选项).
因为,我是汇编语言的新手并且对它知之甚少,这个问题将是非常原始的.不过,我希望有人会回答:
假设,我有这个C代码:
main(){
int x = 15;
int y = 6;
int z = x - y;
return 0;
}
如果我们查看汇编代码(特别是对应于int z = x – y的部分),我们会看到:
主要:
...
subl $16, %esp
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
movl %eax, -12(%ebp)
...
为什么GCC不能生成类似这样的东西,这样可以减少复制内容.
主要:
...
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %edx
movl -4(%ebp), %eax
subl %edx, %eax
movl %eax, -12(%ebp)
...
附:
Linux zion-5 2.6.32-21-generic#32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU / Linux
gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5)
解决方法:
首先,正如Mysticial评论的那样,你应该开启一些优化.尝试将-O2(或-O3,或仅-O1)传递给gcc.如果您想了解更多生成的汇编代码,还要传递-fverbose-asm.如果您想了解代码生成(或不生成)的原因,请学习GCC内部(也许也传递-fdump-tree-all和-fdump-rtl-all,它会生成大量内部转储文件).
MELT上的一些幻灯片(MELT是扩展GCC的领域特定语言)可能有助于提供其他参考.
当被问及时,GCC可以给你的优化量可能会让你感到惊讶.默认情况下,GCC不会优化.有一些优化你应该明确要求(甚至没有在-O3完成).
最新版本的GCC可能比旧版本更优化.目前的GCC版本是4.7
PS.我不再在MELT上工作了(2017年放弃了它)
内容总结
以上是互联网集市为您收集整理的linux – 为什么gcc会生成详细的汇编代码?全部内容,希望文章能够帮你解决linux – 为什么gcc会生成详细的汇编代码?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。