dongyu2764 2017-06-22 11:20
浏览 87
已采纳

为什么常量会转义以堆积在golang中?

Here is my golang code to set a key C to value 1 in redis

It uses third party code in order to connect to 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)
    }
}

On doing go build -gcflags "-m -m", it reports

./del.go:41: 1 escapes to heap

./del.go:41: from c.Do("SET", "C", 1) (parameter to indirect call) at ./del.go:41

Why does 1 escape to the heap ? It is a simple constant whose complete information is known at compile time and it takes just 64bits on a 64bit system. Why should it be stored in heap memory?

  • 写回答

1条回答 默认 最新

  • dtw52353 2017-06-22 12:36
    关注

    The signature of Do is:

    Do(commandName string, args ...interface{}) (reply interface{}, err error)

    Because args is a variadic (slice of) interface{} it's heap allocated.

    I believe there could be some optimisations in the pipeline for simple cases like this in future versions of Go: https://github.com/golang/go/issues/15528

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能