golang方法返回局部变量指针

栏目: C · 发布时间: 7年前

内容简介:go的方法可以直接返回局部变量的指针,这主要依赖go是有runtime的语言,编译器在发现有变量可以逃逸出去的时候会在堆上分配变量而不是栈上,这样就可以返回该变量的指针了,且会使该地址的引用+1,当生命空间结束时,gc会去回收。作为对比,C语言就完全需要程序员自己去控制内存了,如果需要从函数内部返回指针,那么需要程序员自己malloc在堆上分配空间,并且需要在外部使用者用完之后即使的free掉。如果直接像go那样返回指针,要么编译不过,要么也是返回一个已经不该使用的栈内存地址,使用该地址会造成严重的错误。

go的方法可以直接返回局部变量的指针,这主要依赖 go 是有runtime的语言,编译器在发现有变量可以逃逸出去的时候会在堆上分配变量而不是栈上,这样就可以返回该变量的指针了,且会使该地址的引用+1,当生命空间结束时,gc会去回收。

package main

import "fmt"

func test() *int {
    var inner int = 100
    return &inner
}

func main() {
    outer := test()
    fmt.Println(outer)
}

作为对比,C语言就完全需要 程序员 自己去控制内存了,如果需要从函数内部返回指针,那么需要程序员自己malloc在堆上分配空间,并且需要在外部使用者用完之后即使的free掉。如果直接像go那样返回指针,要么编译不过,要么也是返回一个已经不该使用的栈内存地址,使用该地址会造成严重的错误。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java核心技术·卷 I(原书第10版)

Java核心技术·卷 I(原书第10版)

[美] 凯.S.霍斯特曼(Cay S. Horstmann) / 周立新 等 / 机械工业出版社 / 2016-9 / CNY 119.00

Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与《Java编程思想》齐名,10余年全球畅销不衰,广受好评。第10版根据Java SE 8全面更新,同时修正了第9版中的不足,系统全面讲解了Java语言的核 心概念、语法、重要特性和开发方法,包含大量案例,实践性强。 一直以来,《Java核心技术》都被认为是面向高级程序员的经典教......一起来看看 《Java核心技术·卷 I(原书第10版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码