偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

局部變量分配在棧上還是堆上?

存儲(chǔ) 存儲(chǔ)軟件
一般來(lái)說(shuō),局部變量的作用域僅在該函數(shù)中,當(dāng)函數(shù)返回后,所有局部變量所占用的內(nèi)存空間都將被收回,對(duì)于這類變量,都是從棧上分配內(nèi)存空間,這一點(diǎn)大家應(yīng)該是沒有爭(zhēng)議的。

[[426263]]

大家好,我是明哥。

本專欄內(nèi)容,已經(jīng)上傳 github:https://github.com/iswbm/golang-interview

請(qǐng)大家?guī)蛶兔θc(diǎn)個(gè)小 ??,在那里我對(duì)題庫(kù)進(jìn)行了分類整理。

本篇問(wèn)題:局部變量分配在棧上還是堆上?

# 什么是堆內(nèi)存和棧內(nèi)存?

根據(jù)內(nèi)存管理(分配和回收)方式的不同,可以將內(nèi)存分為 堆內(nèi)存 和 棧內(nèi)存。

那么他們有什么區(qū)別呢?

堆內(nèi)存:由內(nèi)存分配器和垃圾收集器負(fù)責(zé)回收

棧內(nèi)存:由編譯器自動(dòng)進(jìn)行分配和釋放

一個(gè)程序運(yùn)行過(guò)程中,也許會(huì)有多個(gè)棧內(nèi)存,但肯定只會(huì)有一個(gè)堆內(nèi)存。

每個(gè)棧內(nèi)存都是由線程或者協(xié)程獨(dú)立占有,因此從棧中分配內(nèi)存不需要加鎖,并且棧內(nèi)存在函數(shù)結(jié)束后會(huì)自動(dòng)回收,性能相對(duì)堆內(nèi)存好要高。

而堆內(nèi)存呢?由于多個(gè)線程或者協(xié)程都有可能同時(shí)從堆中申請(qǐng)內(nèi)存,因此在堆中申請(qǐng)內(nèi)存需要加鎖,避免造成沖突,并且堆內(nèi)存在函數(shù)結(jié)束后,需要 GC (垃圾回收)的介入?yún)⑴c,如果有大量的 GC 操作,將會(huì)吏程序性能下降得歷害。

# 局部變量是從哪里分配的?

在函數(shù)里聲明定義的變量,我們稱之為局部變量。

一般來(lái)說(shuō),局部變量的作用域僅在該函數(shù)中,當(dāng)函數(shù)返回后,所有局部變量所占用的內(nèi)存空間都將被收回,對(duì)于這類變量,都是從棧上分配內(nèi)存空間,這一點(diǎn)大家應(yīng)該是沒有爭(zhēng)議的。

可有一種局部變量,比較特殊。

這種局部變量,雖然在函數(shù)里聲明定義,但是在函數(shù)外還會(huì)持續(xù)的使用。

對(duì)于這類局部變量,顯然我們是不希望函數(shù)退出后將其銷毀的。

那怎么辦呢?可以從堆區(qū)分配內(nèi)存空間給這類局部變量。

不過(guò)這個(gè)事實(shí)其實(shí)不用程序員操心,Go 的編譯器會(huì)自行判斷做優(yōu)化的。但我們?nèi)匀恍枰肋@個(gè)知識(shí)點(diǎn)(因?yàn)槊嬖嚂?huì)問(wèn)哈哈)

本文轉(zhuǎn)載自微信公眾號(hào)「Go編程時(shí)光」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go編程時(shí)光公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Go編程時(shí)光
相關(guān)推薦

2010-10-14 09:34:34

JVM局部變量

2009-09-17 13:05:38

Linq局部變量類型

2025-06-05 08:05:00

vectorC++對(duì)象存儲(chǔ)

2009-08-26 16:37:07

C#迭代器局部變量

2009-12-15 10:48:54

Ruby局部變量

2020-11-11 21:26:48

函數(shù)變量

2018-05-14 09:15:24

Python變量函數(shù)

2009-09-11 10:07:05

Linq隱式類型化局部

2009-10-12 14:13:00

VB.NET使用局部變

2015-01-07 14:41:32

Android全局變量局部變量

2010-03-15 09:32:56

Python函數(shù)

2024-05-29 08:49:22

Python全局變量局部變量

2009-08-27 10:08:36

C#隱含類型局部變量

2022-12-12 08:42:06

Java對(duì)象棧內(nèi)存

2017-02-08 12:28:37

Android變量總結(jié)

2009-09-22 17:21:24

線程局部變量

2023-09-24 23:40:54

Python變量

2025-04-25 11:30:00

vector編程C++

2012-07-11 23:10:49

SQL Server數(shù)據(jù)庫(kù)

2009-08-26 15:39:08

C#隱式類型局部變量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)