这是我的golang代码,用于在Redis中将键C设置为值1
它使用第三方代码连接到redis.
package main
import (
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", ":6379")
_, err = c.Do("SET", "C", 1)
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
在做go build -gcflags "-m -m",它报告
./del.go:41:1逃到堆里
./del.go:41:来自c.Do("SET","C",1)(参数到间接通话)at./ del.go:41
为什么1逃到堆里?它是一个简单的常量,其完整信息在编译时是已知的,在64位系统上只需要64位.为什么要将它存储在堆内存中?
第 1 部分:
我总是被告知使用 Verilog 中的函数来避免代码重复。但是我不能用模块来做到这一点吗?如果我的理解是正确的,除了不能从 always 块内部实例化模块之外,所有函数都可以在 Verilog 中重写为模块。除了在这种情况下,我总是可以坚持使用模块。我对么?
第 2 部分:
如果我是对的,为什么 Verilog 编译器不能以模块得到函数处理的方式编写?我的意思是,为什么编译器不能允许程序员在 n 块内实例化一个模块并停止支持函数?