我对检查标准Go编译器的x86汇编输出很感兴趣,以查看我的代码是否真的被转换为相当有效的汇编代码;希望通过分析和检查汇编输出,我可以获得关于我应该在哪里/如何重写Go代码以获得最大性能的线索。但是当我使用-S标志检查代码时,Go显示出一片混乱!我想要两样东西:
发布于 2014-05-22 02:25:00
转至工具compile -S file.go > file.s
go工具编译-S -N file.go
或者,您可以使用gccgo:
gccgo -S -O0 -masm=intel test.go
这将生成test.s。您可以使用-O0/1/2/3来查看不同的优化。
发布于 2014-05-22 03:39:49
我不推荐使用-S
的输出,因为Go链接器可能会很大程度上改变写入目标代码的内容。它确实让你对正在发生的事情有了一些了解。
go汇编程序的输出也是相当不标准的。
当我想这样做的时候,我总是使用objdump,它会给你一个很好的标准汇编程序输出。
例如x86 / amd64
objdump -d executable > disassembly
而对于ARM (获得与Go使用的相同的寄存器名称)
objdump -M reg-names-raw -d executable > disassembly
发布于 2016-07-25 15:30:06
对生成的可执行文件运行go tool objdump
。
要将输出限制为感兴趣的函数,请使用其-s
选项。
https://stackoverflow.com/questions/23789951
复制相似问题