go

Go 内存分配机制浅析与示例

发布于 2025-10-31 02:27:16

Go 内存分配机制浅析与示例

在 Go 语言中,内存分配由 runtime 的 mheapmcache 共同完成。mheap 是全局堆,负责大对象和整体管理,而 mcache 是每个 P(逻辑处理器)的局部分配缓存,用于小对象的快速分配。这样可以减少全局锁竞争,提高并发效率。Go 还引入了 对象池化(sync.Pool) 来降低 GC 压力。

核心点:

  1. 小对象(<32KB)一般直接从 mcache 获取,速度快。
  2. 大对象则由 mheap 管理,可能触发 GC。
  3. sync.Pool 适合高频复用对象,避免频繁分配与回收。

示例代码:

package main

import (
    "fmt"
    "sync"
)

var bufPool = sync.Pool{
    New: func() interface{} {
        return make([]byte, 1024)
    },
}

func main() {
    buf := bufPool.Get().([]byte)
    copy(buf, []byte("hello pool"))
    fmt.Println(string(buf[:11]))
    bufPool.Put(buf)
}

运行时不会频繁分配新内存,而是从池中取出复用,降低 GC 压力。


0 条评论

发布
问题