返回介绍

上卷 程序设计

中卷 标准库

下卷 运行时

源码剖析

附录

2.2 结构

发布于 2024-10-12 19:15:55 字数 2821 浏览 0 评论 0 收藏 0

+-----------------+                    +------------+
| mheap           |                    | pageAlloc  |
+-----------------+                    +------------+
|  alloc          |                    |  alloc     |
+-----------------+                    +------------+         {OS memory}
|  allocSpan      | ---+               |  free      |              ^
+-----------------+    |               +------------+              |
|  grow           |    |               |  grow      |              |
+-----------------+    +-- h.pages --> +------------+     +--------+---------+
|  freeSpan       |    |               |  sysGrow  -|---> | sysMap | sysUsed |
+-----------------+    |               +------------+     +--------+---------+
|  freeSpanLocked | ---+
+-----------------+ 
|  sysAlloc       |
+-----------------+ <-----------------------+
                                            |
                                            |
                           +----------+     |            +----------------+
                   +-----> | zerobase |     |            | mcentral       |
  +-----------+    |       +----------+     + <--------- +----------------+
  | newobject |    |                        ^            |  cacheSpan     |
  +-----------+    |                        |            +----------------+
  | mallocgc -|----+                        |            |  uncacheSpan   |
  +-----------+    |                        +----------> +----------------+
                   |                        |            |  grow          |
                   |                        |            +----------------+
                   |       +------------------+                 |
                   +-----> | mcache           |                 |
                           +------------------+                 v
                           |  allocLarge      |          +----------------+
                           +------------------+          | sweepLocked    |
                           |  nextFree       -|----+     +----------------+
                           +------------------+    |     |  sweep         |
                           |  refill          |    |     +----------------+
+-------------------+      +------------------+    |             |
| gcMarkTermination | ---> |  prepareForSweep |    |             |
+-------------------+      +------------------+    |             v
                           |  releaseAll      |    |     +----------------+
                           +------------------+    |     | mspan          |
                                                   |     +----------------+
                                                   +---> |  nextFreeIndex |
                                                         +----------------+

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文