首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go接口优化

Go接口优化
EN

Stack Overflow用户
提问于 2018-08-06 21:40:54
回答 1查看 186关注 0票数 3

参考Russ Cox 2009年12月的文章,Go Data Structures: Interfaces

在内存优化部分,Russ建议,如果存储在interface{}中的数据小于uintptr的大小,那么该值将直接存储在接口中,并且不需要分配数据,然后获取其地址。

如果我用下面的代码测试它:

代码语言:javascript
复制
package main

import (
    "fmt"
    "unsafe"
)

type iface struct {
    _    unsafe.Pointer
    data unsafe.Pointer
}

func main() {
    var i interface{} = 12
    var pi = (*iface)(unsafe.Pointer(&i))
    fmt.Printf("if.data: %p", pi.data)
}

结果是:

代码语言:javascript
复制
if.data: 0x127e2c

显然,这是一个地址,而不是在执行优化时所期望的值12。

Go不再支持界面优化了吗?还是我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-08-06 22:37:01

本页列出了编译器所做的优化。请注意,语言规范并不保证这些。

接口值

接口值中的字长值

将字大小或更小的非指针类型放在接口值中不会进行分配。

gc: 1.0-1.3,但不在1.4+中gccgo:从不

Go不再为Go1.4+执行这种优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51709033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档