局部变量分拨在栈上照旧堆上?

发布日期:2022-06-18 17:10    点击次数:199


局部变量分拨在栈上照旧堆上?

人人好,我是明哥。

本专栏本色,依然上传 github:https://github.com/iswbm/golang-interview

请人人帮襄理去点个小 ??,在那里我对题库进行了分类整理。

本篇问题:局部变量分拨在栈上照旧堆上?

# 什么是堆内存和栈内存?

阐明内存解决(分拨和回收)神志的不同,不错将内存分为 堆内存 和 栈内存。

那么他们有什么区别呢?

堆内存:由内存分拨器和垃圾网罗器细密回收

栈内存:由编译器自动进行分拨和开释

一个程序开动历程中,也许会有多个栈内存,但细目只会有一个堆内存。

每个栈内存都是由线程大概协程独处占有,因此从栈等分拨内存不需要加锁,况兼栈内存在函数放胆后会自动回收,性能相对堆内存好要高。

而堆内存呢?由于多个线程大概协程都有可能同期从堆中恳求内存,因此在堆中恳求内存需要加锁,幸免形成突破,况兼堆内存在函数放胆后,需要 GC (垃圾回收)的介入参与,若是有大都的 GC 操作,男女啪啪高潮无遮挡免费将会吏程序性能下落得横暴。

# 局部变量是从那里分拨的?

在函数里声明界说的变量,咱们称之为局部变量。

一般来说,局部变量的作用域仅在该函数中,当函数复返后,总共局部变量所占用的内存空间都将被收回,关于这类变量,都是从栈上分拨内存空间,这少许人人应该是莫得争议的。

可有一种局部变量,相比特等。

这种局部变量,天然在函数里声明界说,可是在函数外还会连续的使用。

关于这类局部变量,昭彰咱们是不但愿函数退出后将其死心的。

那若何办呢?不错从堆折柳拨内存空间给这类局部变量。

不外这个事实其实无须程序员费神,Go 的编译器会自行判断做优化的。但咱们仍然需要澄澈这个常识点(因为口试会问哈哈)

本文转载自微信公众号「Go编程时光」,不错通过以下二维码轻柔。转载本文请关系Go编程时光公众号。

 






Powered by 丰满多毛的大隂户毛茸茸 @2013-2022 RSS地图 HTML地图

栏目分类

热点资讯

相关资讯