go - 易于阅读的 Golang 汇编输出?

标签 go assembly x86

我有兴趣检查标准 Go 编译器的 x86 汇编输出,看看我的代码是否真的被转换成相当有效的汇编代码;希望通过分析和检查程序集输出,我可以获得关于我应该在哪里/如何重写我的 Go 代码以获得最佳性能的线索。但是当我使用 -S 标志检查代码时,Go 吐出一团糟!我想要两件事:

  1. 有没有办法让 Go 编译器将程序集输出转储到文件中,而不仅仅是在终端上打印出来?

  2. 另外,有没有办法让 Go 编译器将汇编代码分离成带有标签的单独函数?我知道某些函数可能是内联的,因此不会出现在汇编代码中。我所看到的只是一个同质的组装 block ,几乎无法理解。

最佳答案

  1. 您可以将输出重定向到这样的文件:

     go tool compile -S file.go > file.s
    
  2. 您可以使用 -N 禁用优化:

     go tool compile -S -N file.go
    

或者,您可以使用 gccgo:

gccgo -S -O0 -masm=intel test.go

这将生成 test.s。您可以使用 -O0/1/2/3 来查看不同的优化。

关于go - 易于阅读的 Golang 汇编输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789951/

相关文章:

c - 在 Win32 上双转换为 unsigned int 被截断为 2,147,483,648

go - 如何解决 "too many arguments to return"问题

将程序集转换为等效的 C 代码

c - GCC 内联汇编乘法

c - 编程旧控制台,Magnavox Odyssey 2?

assembly - 帧指针、epb 和返回地址

assembly - 关于多核CPU的x86 LOCK问题

arrays - Go:数组超出索引 panic 错误

go - 如何确保向 channel 发送消息的顺序正确

使用不同运行时类型的通用容器