《Go语言内存管理》一文是否全面解析了内存分配与回收机制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计9100个文字,预计阅读时间需要37分钟。
在最初学习C、C++语言时,它们都把内存管理交给了开发者,这种做法既灵活又充满挑战。虽然这种方式很灵活,但问题频出,对开发者要求极高;随后出现的Java、JavaScript等高级语言,则更多地承担了内存管理的责任。
最早学习C、C++语言时,它们都是把内存的管理全部交给开发者,这种方式最灵活但是也最容易出问题,对人员要求极高;后来出现的一些高级语言像Java、JavaScript、C#、Go,都有语言自身解决了内存分配和回收问题,降低开发门槛,释放生产力。然而对于想要深入理解原理的同学来说却带来了负担,本篇文章主要从内存分配角度来梳理个人理解,后续文章中会介绍Go的垃圾回收机制。 进程的内存空间- 程序文件段(.text),包括二进制可执行代码;
- 已初始化数据段(.data),包括静态常量;
- 未初始化数据段(.bss),包括未初始化的静态变量;(bss与data一般作为静态存储区)
- 堆段,包括动态分配的内存,从低地址开始向上增长;
- 文件映射段,包括动态库、共享内存等,从低地址开始向上增长(跟硬件和内核版本有关(opens new window));
- 栈段,包括局部变量和函数调用的上下文等。栈的大小是固定的,一般是8 MB。当然系统也提供了参数,以便我们自定义大小;
本文共计9100个文字,预计阅读时间需要37分钟。
在最初学习C、C++语言时,它们都把内存管理交给了开发者,这种做法既灵活又充满挑战。虽然这种方式很灵活,但问题频出,对开发者要求极高;随后出现的Java、JavaScript等高级语言,则更多地承担了内存管理的责任。
最早学习C、C++语言时,它们都是把内存的管理全部交给开发者,这种方式最灵活但是也最容易出问题,对人员要求极高;后来出现的一些高级语言像Java、JavaScript、C#、Go,都有语言自身解决了内存分配和回收问题,降低开发门槛,释放生产力。然而对于想要深入理解原理的同学来说却带来了负担,本篇文章主要从内存分配角度来梳理个人理解,后续文章中会介绍Go的垃圾回收机制。 进程的内存空间- 程序文件段(.text),包括二进制可执行代码;
- 已初始化数据段(.data),包括静态常量;
- 未初始化数据段(.bss),包括未初始化的静态变量;(bss与data一般作为静态存储区)
- 堆段,包括动态分配的内存,从低地址开始向上增长;
- 文件映射段,包括动态库、共享内存等,从低地址开始向上增长(跟硬件和内核版本有关(opens new window));
- 栈段,包括局部变量和函数调用的上下文等。栈的大小是固定的,一般是8 MB。当然系统也提供了参数,以便我们自定义大小;

