开云(中国)KY体育官方网站-2024kaiyuntiyu全站

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

发布日期:2023-12-09 14:16    点击次数:57

[[426263]]

大师好,我是明哥。

本专栏践诺,还是上传 github:https://github.com/iswbm/golang-interview

请大师帮维护去点个小 ??,在那里我对题库进行了分类整理。

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

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

说明内存惩处(分派和回收)神志的不同,不错将内存分为 堆内存 和 栈内存。

那么他们有什么区别呢?

堆内存:由内存分派器和垃圾蚁合器精致回收

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

一个要津启动进程中,也许会有多个栈内存,但详情只会有一个堆内存。

每个栈内存齐是由线程梗概协程寂然占有,因此从栈平分派内存不需要加锁,况且栈内存在函数限制后会自动回收,性能相对堆内存好要高。

而堆内存呢?由于多个线程梗概协程齐有可能同期从堆中肯求内存,因此在堆中肯求内存需要加锁,幸免形成冲破,况且堆内存在函数限制后,需要 GC (垃圾回收)的介入参与,若是有多数的 GC 操作,将会吏要津性能着落得强烈。

# 局部变量是从那边分派的?

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

一般来说,局部变量的作用域仅在该函数中,当函数复返后,系数局部变量所占用的内存空间齐将被收回,关于这类变量,齐是从栈上分派内存空间,这小数大师应该是莫得争议的。

可有一种局部变量,相比出奇。

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

关于这类局部变量,显明咱们是不但愿函数退出后将其葬送的。

那若何办呢?不错从堆分辨派内存空间给这类局部变量。

不外这个事实其实无用要津员牵记,Go 的编译器会自行判断作念优化的。但咱们仍然需要知谈这个学问点(因为口试会问哈哈)

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

 kaiyun



热点资讯
相关资讯