• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jiang1234321
V2EX  ›  程序员

一个内存地址的问题

  •  
  •   jiang1234321 ·
    jiangbo9510 · Jun 4, 2023 · 2125 views
    This topic created in 1082 days ago, the information mentioned may be changed or developed.

    package main

    import ( "fmt" )

    func test() *int { a := int(1) return &a } func main() { b := test() fmt.Printf("%d\n", *b) }

    如上代码, 这里按理 test 内的变量都是栈空间,函数跑完就释放了。但是这个代码还能正常编译运行。 这是为啥? 是不是编译器做了栈逃逸,实际分配还是在堆空间?

    2 replies    2023-06-04 02:10:40 +08:00
    hsfzxjy
        1
    hsfzxjy  
       Jun 4, 2023 via Android
    > 是不是编译器做了栈逃逸,实际分配还是在堆空间?

    是的
    lincanbin
        2
    lincanbin  
       Jun 4, 2023
    是逃逸了,golang 编译器提供了逃逸分析工具,你可以结合这个工具来理解程序的实际运行情况。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2556 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
    ♥ Do have faith in what you're doing.