作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这是我的 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)
}
}
在执行 go build -gcflags "-m -m"
时,它会报告
./del.go:41: 1 escapes to heap
./del.go:41: from c.Do("SET", "C", 1) (parameter to indirect call) at ./del.go:41
为什么 1 会逃逸到堆中?它是一个简单的常量,其完整信息在编译时已知,并且在 64 位系统上仅占用 64 位。为什么要放在堆内存中?
最佳答案
Do
的签名是:
Do(commandName string, args ...interface{}) (回复interface{}, err错误)
因为 args
是 interface{}
的可变参数( slice ),所以它是堆分配的。
我相信在 Go 的 future 版本中可能会针对像这样的简单情况进行一些优化:https://github.com/golang/go/issues/15528
关于go - 为什么在 golang 中不断逃逸到堆中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697906/
我是Linux的新手,正在尝试创建一个TikZ图形来解析文件。为此,我使用包含以下语句的$%&-bash脚本读取文件 echo "\fill[color=blue] ($xp,$zp) circle
我是一名优秀的程序员,十分优秀!