gpt4 book ai didi

go - 为什么在 golang 中不断逃逸到堆中?

转载 作者:IT王子 更新时间:2023-10-29 01:08:15 26 4
gpt4 key购买 nike

这是我的 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错误)

因为 argsinterface{} 的可变参数( slice ),所以它是堆分配的。

我相信在 Go 的 future 版本中可能会针对像这样的简单情况进行一些优化:https://github.com/golang/go/issues/15528

关于go - 为什么在 golang 中不断逃逸到堆中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com