首页 > 系统相关 >go内存逃逸

go内存逃逸

时间:2023-01-21 20:44:07浏览次数:39  
标签:int 逃逸 内存 func go main 指针

逃逸分析

go在编译时确定是否逃逸,逃逸分析是编译器决定变量分配到栈上还是堆上的一种行为。

查看逃逸分析日志:go build -gcflags=-m
其中,-m打印出逃逸分析的优化策略。

指针逃逸

函数局部变量优先分配到栈上。
如果编译器不能确保变量在函数return之后不再被引用,那么编译器就会将变量分配到堆上。
如果一个局部变量非常大,那么它会被分配到堆上。

函数传递指针比传值效率高吗?
传递指针可以减少底层值的拷贝。如果拷贝的数据量小,那么指针传递会产生逃逸,使用堆,增加GC负担,所以传递指针不一定是高效的。

package main

type A struct {
	a int
}

func getA() *A {
	s := new(A)
	s.a = 10
	return s
}

func main() {
	getA()
}

栈空间不足逃逸

当栈空间不足以存放当前对象或无法判断当前切片长度时会将对象分配到堆中。

package main

func main() {
	s := make([]int, 10000, 10000)
	for i, _ := range s {
		s[i] = i
	}
}

动态类型逃逸

函数参数是interface类型,编译时很难确定参数的具体类型,会产生逃逸。

func Print(a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
package main

import "fmt"

func main() {
    fmt.Print("a")
    fmt.Println("b")
}

 

标签:int,逃逸,内存,func,go,main,指针
From: https://www.cnblogs.com/WJQ2017/p/17064023.html

相关文章

  • go检测命令
    map并发读写场景未加锁packagemainimport"time"funcmain(){ m:=make(map[int]int) gofunc(){ fori:=0;i<10000;i++{ m[0]=1 } }() gof......
  • go RWMutex源码分析
    适用场景并发场景下读多写少。字段含义RWMutex基于Mutex,写优先,Lock函数(反转readerCount)会阻止新的reader获取锁。typeRWMutexstruct{  wMutex  // writer......
  • 【算法-基础之排序01】Go语言实现
    仓库码云地址远程仓库地址声明本人是个菜鸟,不一定对哦。。。我只测试一个是正确的。还有对于数组只有一个数或者nil的不考虑。先写一个公共的方法。替换俩个位置的数......
  • go sync.Once源码分析
    适用场景服务启动时读取全局配置。单个函数流程里面只调用一次。源码双重检查done值是0后,加锁执行指定函数并把done值改成1。typeOncestruct{ doneuint32 mM......
  • GO语言之环境搭建和基本命令
    目录go语言基础下载go编译器go目录简介gopath简介环境变量配置GOPATHPATHgo语言项目结构IDE下载与配置安装golandgoland里添加goroot和gopath编写第一个GO程序编译go文件在......
  • 进程相关概念、虚拟内存和物理内存映射关系
    学习地址进程和程序并发分时复用cpu单道程序设计多道程序设计cpu和mmu学习地址mmu在cpu内部虚拟内存和物理内存映射......
  • 一文学会 Go 的三个主流开发框架
    一文学会Go的三个主流开发框架前言本文介绍了三个Go主流开发框架GORM,Kitex,Hertz的基本使用方法,覆盖了ORM,RPC,HTTP三个领域。帮助读者快速入门Go工程开发。GORM......
  • JVM内存划分
    JVM内存划分概述java虚拟机(JavaVirtualMachine简称JVM):是运行所有java程序的抽象计算机,是java语言的运行环境。对于java语言来说,在虚拟机的自动内存管理机制的帮助......
  • alpha shape algorithm
    一个求轮廓的算法analphavalue(0<α<∞)isaparameterimposingtheprecisionofthefinalboundary.Alargevalue(α->∞)resultsinthealphaboundaryo......
  • (17)go-micro微服务Prometheus监控
    目录一Prometheus监控介绍1.微服务监控系统promethues介绍2.微服务监控系统promethues工作流程二Prometheus监控重要组件和重要概念1.微服务监控系统promethues重要组件2......