gpt4 book ai didi

Go界面优化

转载 作者:IT王子 更新时间:2023-10-29 01:12:07 27 4
gpt4 key购买 nike

引用 Russ Cox 2009 年 12 月的文章,Go Data Structures: Interfaces

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

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

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)
}

结果是:-

if.data: 0x127e2c

显然是一个地址,而不是执行优化后预期的值 12。

Go 不再支持界面优化还是我遗漏了什么?

最佳答案

Compiler And Runtime Optimizations

This page lists optimizations done by the compilers. Note that these are not guaranteed by the language specification.

Interface values

Word-sized value in an interface value

Putting a word-sized-or-less non-pointer type in an interface value doesn't allocate.

gc: 1.0-1.3, but not in 1.4+
gccgo: never

Go 不再对 Go1.4+ 执行该优化。

关于Go界面优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709033/

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