golang 内存布局
时间: 2024-01-03 22:04:46 浏览: 31
Golang的内存布局由mspan、mcache、mcentral和mheap四个部分组成,它们的作用分别是:
1. mspan:mspan是一组连续的页,用于存储分配的对象。每个mspan都有一个固定的大小,通常为256KB。当需要分配一个新对象时,Golang会在mspan中查找一个足够大的空闲区域,并将其分配给新对象。
2. mcache:mcache是每个线程的本地缓存,用于存储小对象。当线程需要分配一个小对象时,它会首先在mcache中查找是否有足够的空间。如果没有,它会从mcentral中获取一个新的mspan,并将其添加到mcache中。
3. mcentral:mcentral是一组中央缓存,用于存储大对象。当线程需要分配一个大对象时,它会从mcentral中获取一个新的mspan,并将其添加到mcache中。
4. mheap:mheap是所有线程共享的堆,用于存储所有的对象。当需要分配一个新对象时,Golang会从mheap中获取一个新的mspan,并将其添加到mcache或mcentral中。
以下是一个简单的Golang内存布局示意图:
```
+-----------------------+
| mspan |
+-----------------------+
| mspan |
+-----------------------+
| mspan |
+-----------------------+
| mcache |
+-----------------------+
| mcentral |
+-----------------------+
| mheap |
+-----------------------+
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)