gpt4 book ai didi

function - 返回堆栈上的指针

转载 作者:IT老高 更新时间:2023-10-28 13:09:02 26 4
gpt4 key购买 nike

在 C 语言中,当我从函数返回堆栈创建的变量的指针时,在函数返回后内存会被丢弃,从而使指针无法取消引用。但是在 Go 中,编译器没有给我任何错误。这是否意味着这样做是安全的?

package main

import (
"fmt"
)

func main() {
fmt.Println(*(something()))
}

func something() *string {
s := "a"
return &s
}

最佳答案

是的,这在 Go 编程中是安全且正常的模式。 Go 使用 escape analysis将带有指针的任何值自动从堆栈中移出到堆中。您无需关心分配值的位置。

来自 Go 常见问题解答:"How do I know whether a variable is allocated on the heap or the stack?"

if the compiler cannot prove that the variable is not referenced after the function returns, then the compiler must allocate the variable on the garbage-collected heap to avoid dangling pointer errors

您可以在编译期间使用 -gcflags -m 选项查看这些优化选项。

关于function - 返回堆栈上的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234487/

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