编译

61 阅读1分钟

- (66条消息) 一文读懂堆与栈的区别_恋喵大鲤鱼的博客-CSDN博客_堆和栈的区别

image.png

image.png

如果变量都分配到堆上,堆不像栈可以自动清理。它会引起Go频繁地进行垃圾回收,而垃圾回收会占用比较大的系统开销(占用CPU容量的25%)。

堆和栈相比,适合不可预知大小的内存分配。但是为此付出的代价是分配速度较慢,而且会形成内存碎片栈内存分配则会非常快。栈分配内存只需要两个CPU指令:“PUSH”和“RELEASE”,分配和释放;而堆分配内存首先需要去找到一块大小合适的内存块,之后要通过垃圾回收才能释放。

通过逃逸分析,可以尽量把那些不需要分配到堆上的变量直接分配到栈上,堆上的变量少了,会减轻分配堆内存的开销,同时也会减少gc的压力,提高程序的运行速度

  • 从源文件到可执行目标文件的转化过程:

7.png

image.png