【发布时间】:2014-07-10 11:52:38
【问题描述】:
我有兴趣检查标准 Go 编译器的 x86 汇编输出,看看我的代码是否真的被转换为相当有效的汇编代码;希望通过分析和检查程序集输出,我可以获得关于我应该在哪里/如何重写我的 Go 代码以获得最佳性能的线索。但是当我使用 -S 标志检查代码时,Go 吐出一团糟!我想要两件事:
有没有办法让 Go 编译器将程序集输出转储到文件中,而不仅仅是在终端上打印出来?
另外,有没有办法让 Go 编译器将汇编代码分离成带有标签的单独函数?我知道某些函数可能是内联的,因此不会出现在汇编代码中。我所看到的只是一个同质的组装块,几乎无法理解。
【问题讨论】:
-
1) 使用
>或您的命令shell 支持的任何东西将命令的输出重定向到文件怎么样? -
另外,通过查看汇编代码进行分析的方法可能不是最有效的方法。您是否查看过可用于 Go 代码的分析工具? (例如blog.golang.org/profiling-go-programs)
-
我同意你的观点,汇编输出需要一些改进。问题是 Go 编译器不会生成实际的程序集。它生成的东西看起来很像汇编,但包含许多将由链接器扩展的伪指令。只有在链接完成后,才会产生实际的组装(并立即组装)。
-
另外,看看how the Plan 9 assembler works。 Go 的参考实现使用了这个汇编器。
-
PS:我正在寻找类似于 GCC 命令的东西:-fverbose-asm