成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讓我們一起分析 Go 語言逃逸

開發 前端
本文我們介紹 Go 語言逃逸分析,它可以幫助使用者合理分配對象的內存空間。我們知道分配到堆內存空間的對象,會導致 Go 執行垃圾回收,而垃圾回收會占用系統資源,降低應用程序本身可使用的系統資源。

1.介紹

熟悉 C / C++ 的讀者朋友們應該都知道一個進程(應用程序)的虛擬內存空間劃分為棧內存區和堆內存區。

棧內存區上對象的內存空間是自動分配和銷毀的,使用者無需關心。但是,堆內存區上對象的內存空間是需要使用者自己管理,無形中增加了使用者的心智負擔。

因此,一些高級語言會支持垃圾回收(GC),降低使用者內存管理的心智負擔。支持垃圾回收的語言可以自動管理堆內存區上對象的內存空間。

Go 語言編譯器負責決定把對象分配到棧上或堆上,比如一個對象在函數退出后就不可達(沒有其他對象引用該對象)時,那就將該對象分配到棧上,反之,則分配到堆上。

如果一個對象被分配到堆上,就需要 Go 的垃圾回收管理該對象的內存空間。但是,垃圾回收是有代價的,它會占用系統開銷。

所以,為了更大限度地降低垃圾回收占用的系統資源,提升應用程序本身可使用的系統資源,使用者就需要盡量減少堆內存分配,盡量多地使應用程序使用棧內存分配,盡量避免 Go 編譯器通過逃逸分析優化后被分配到棧內存的對象逃逸到堆內存。

2.查看對象是否發生逃逸

Go 語言工具鏈提供了查看對象是否逃逸的方法,我們在執行 go build 時,配合使用參數 -gcflags 開啟編譯器支持的額外功能,例如:

go build -gcflasg '-m -m -l' main.go

  • -m 用于輸出編譯器的執行細節,包括逃逸分析的執行。
  • -l 用于禁用內聯優化。

我們通過使用 Go 語言工具鏈對一段簡單的示例代碼進行查看對象是否發生逃逸。

func main() {
sum(1, 2)
}

func sum(a, b int) *int {
res := a + b
return &res
}

輸出結果:

go build -gcflags '-m -m -l' main.go
# command-line-arguments
./main.go:8:2: res escapes to heap:
./main.go:8:2: flow: ~r0 = &res:
./main.go:8:2: from &res (address-of) at ./main.go:9:9
./main.go:8:2: from return &res (return) at ./main.go:9:2
./main.go:8:2: moved to heap: res

閱讀上面這段代碼,我們發現 sum 函數中的變量 res 逃逸到堆,也就是說 Go 編譯器通過逃逸分析,決定將變量 res 分配到堆空間。

3.逃逸分析的作用

Go 語言編譯器通過逃逸分析優化,將對象合理分配到棧空間和堆空間。

因為棧內存分配比堆內存分配更快,所以 Go 語言在編譯時通過逃逸分析優化將不會發生逃逸的對象優先分配到棧空間。

因此,不僅降低堆空間內存分配的開銷,同時,也可以降低垃圾回收占用的系統資源。

4.總結

本文我們介紹 Go 語言逃逸分析,它可以幫助使用者合理分配對象的內存空間。

我們知道分配到堆內存空間的對象,會導致 Go 執行垃圾回收,而垃圾回收會占用系統資源,降低應用程序本身可使用的系統資源。

所以,我們在實際項目開發中,可以借助 Go 工具鏈分析對象是否會發生逃逸,盡量避免一些不必要的對象逃逸。

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2022-03-31 18:59:43

數據庫InnoDBMySQL

2021-08-27 07:06:10

IOJava抽象

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2022-03-08 17:52:58

TCP格式IP

2021-11-26 07:00:05

反轉整數數字

2021-07-15 07:23:28

Singlefligh設計

2022-02-14 10:16:22

Axios接口HTTP

2016-09-06 10:39:30

Dell Techno

2022-06-26 09:40:55

Django框架服務

2022-02-14 07:03:31

網站安全MFA

2023-08-14 08:38:26

反射reflect結構體

2023-08-02 08:35:54

文件操作數據源

2022-08-01 07:57:03

數組操作內存

2012-04-14 20:47:45

Android

2021-07-31 11:40:55

Openresty開源

2021-12-16 12:01:21

區塊鏈Libra貨幣

2012-06-28 10:38:45

Web

2014-02-25 08:59:14

2021-11-09 23:54:19

開發SMI Linkerd

2022-12-05 09:10:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天夜夜操| 午夜影院操 | 在线成人免费视频 | 午夜影晥| 国产精品爱久久久久久久 | 欧美成年人视频在线观看 | 欧美高清视频在线观看 | 免费观看av| 国产精品毛片一区二区在线看 | 91av视频在线观看 | 大伊人久久 | 国产一在线观看 | 国产香蕉视频在线播放 | 欧美精品在线一区 | 成人欧美一区二区三区白人 | 国产色婷婷 | 亚洲日本激情 | 91色站| 久久久久久久久国产精品 | 91久久国产综合久久 | 欧美日韩一区二区视频在线观看 | 欧美日一区二区 | 国产精品永久免费观看 | 伊人春色成人网 | 在线播放国产一区二区三区 | 中文精品久久 | 欧美黄色片在线观看 | 国产高清精品一区二区三区 | 久久综合狠狠综合久久综合88 | 亚洲精品乱码久久久久久蜜桃 | 一级黄色影片在线观看 | 天天爽综合网 | 精一区二区 | 中国一级特黄真人毛片免费观看 | 毛片久久久 | 国产精品18hdxxxⅹ在线 | 亚洲综合久久精品 | 一级黄色片日本 | 91天堂网| 久久久久久黄 | 国产精品毛片av一区 |