前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go-标准库-runtime(二)

Go-标准库-runtime(二)

原创
作者头像
堕落飞鸟
发布2023-04-23 07:37:28
1670
发布2023-04-23 07:37:28
举报
文章被收录于专栏:飞鸟的专栏

内存分配

runtime包中的内存分配函数可以动态地分配和释放内存,如下所示:

代码语言:javascript
复制
package main

import (
	"fmt"
	"runtime"
)

func main() {
	var mem runtime.MemStats
	runtime.ReadMemStats(&mem)
	fmt.Println("Before allocation:")
	fmt.Printf("Alloc = %v MiB\n", mem.Alloc/1024/1024)
	fmt.Printf("TotalAlloc = %v MiB\n", mem.TotalAlloc/1024/1024)
	fmt.Printf("HeapAlloc = %v MiB\n", mem.HeapAlloc/1024/1024)
	fmt.Printf("HeapSys = %v MiB\n", mem.HeapSys/1024/1024)

	data := make([]byte, 1024*1024*1024)
	fmt.Println("After allocation:")
	runtime.ReadMemStats(&mem)
	fmt.Printf("Alloc = %v MiB\n", mem.Alloc/1024/1024)
	fmt.Printf("TotalAlloc = %v MiB\n", mem.TotalAlloc/1024/1024)
	fmt.Printf("HeapAlloc = %v MiB\n", mem.HeapAlloc/1024/1024)
	fmt.Printf("HeapSys = %v MiB\n", mem.HeapSys/1024/1024)

	data = nil
	runtime.GC()
	fmt.Println("After GC:")
	runtime.ReadMemStats(&mem)
	fmt.Printf("Alloc = %v MiB\n", mem.Alloc/1024/1024)
	fmt.Printf("TotalAlloc = %v MiB\n", mem.TotalAlloc/1024/1024)
	fmt.Printf("HeapAlloc = %v MiB\n", mem.HeapAlloc/1024/1024)
	fmt.Printf("HeapSys = %v MiB\n", mem.HeapSys/1024/1024)
}

上面的代码先打印出内存分配前的内存信息,然后分配1GB的内存,再次打印出内存分配后的内存信息,然后将分配的内存置为nil,触发垃圾回收,最后再次打印出内存回收后的内存信息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内存分配
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档