map[string]uint8 map[string]bool map[string]struct{} 各自存100条数据,实际占用的存储空间对比

Posted Kris_u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了map[string]uint8 map[string]bool map[string]struct{} 各自存100条数据,实际占用的存储空间对比相关的知识,希望对你有一定的参考价值。

func memoryMapUint8() 
	memoUint8 := map[string]uint8
	for i := 0; i < 100; i++ 
		memoUint8[strconv.Itoa(i)] = uint8(i)
	


func memoryMapBool() 
	memoBool := map[string]bool
	for i := 0; i < 100; i++ 
		memoBool[strconv.Itoa(i)] = true
	


type Number struct 
	Num uint8


func memoryMapStruct() 
	memoStruct := map[string]Number
	for i := 0; i < 100; i++ 
		memoStruct[strconv.Itoa(i)] = NumberNum: uint8(i)
	
	fmt.Println(memoStruct)

 测试:

import (
	"testing"
)

func BenchmarkMemoryMapUint8(b *testing.B) 
	for i := 0; i < b.N; i++ 
		memoryMapUint8()
	
	b.ReportAllocs()


func BenchmarkMemoryMapBool(b *testing.B) 
	for i := 0; i < b.N; i++ 
		memoryMapBool()
	
	b.ReportAllocs()


func BenchmarkMemoryMapStruct(b *testing.B) 
	for i := 0; i < b.N; i++ 
		memoryMapStruct()
	
	b.ReportAllocs()

结果:

allocs/op 表示每个操作(单次迭代)发生了多少个不同的内存分配。

B/op每个操作分配了多少字节.

TimeCunsume (ns/peroperation),MemBytes(),allocs越小代表性能越好。从数据来看结构体存储的内存占用稍微少一些,速度也更快。

以上是关于map[string]uint8 map[string]bool map[string]struct{} 各自存100条数据,实际占用的存储空间对比的主要内容,如果未能解决你的问题,请参考以下文章

遍历Map集合

java中两个map比较

HashMap keyset()方法

map遍历的几种方式和效率问题

JSON字符串转换成Map对象

将 Hocon 配置读取为 Map[String, String],其中键为点符号和值