为什么写这篇文章?
昨天在技术群上,有人问了个问题:
如果一个结构体, 只是读里面的成员, 在 golang 里面传值的时候, 不传递指针, golang 编译器会帮你优化成 const & 么?
随便一猜:golang 肯定是直接 copy 整个结构体。
为了确认是否真的是这样,最直白的方式就是直接看 golang 生成的汇编代码。
从图中的汇编代码中,我们可以清楚的看到:golang 的确是执行了完整的结构体 copy 。
![4648dab445c3487f4dc440796cb653db.png](https://img-blog.csdnimg.cn/img_convert/4648dab445c3487f4dc440796cb653db.png)
然后群友给了这样的反馈...
![76337ecf5e3d6f401556a4ca4069bb8e.png](https://img-blog.csdnimg.cn/img_convert/76337ecf5e3d6f401556a4ca4069bb8e.png)
看着自己日益升高的发际线,我陷入了沉思...
好了,进入正题。
本文将以 1 + ... + 100 的代码为例,介绍以下几种语言查看“汇编代码”的方式。
(这里的“汇编代码”只是个统称,大家不用太计较)
- Golang
- Lua
- JavaScript(V8)
- Rust
- Python
- 等等 ...
1. Golang 生成汇编代码
源码
package main
func main(){
var sum = 0
for i:=1 ; i <= 100; i++ {
sum = sum + i
}
}
查看方式