相关疑难解决方法(0)

golang地图预留了多少内存?

给定未指定初始空间的映射分配,例如:

foo := make(map[string]int)
Run Code Online (Sandbox Code Playgroud)

文件表明,这里的内存分配是依赖于实现.那么(怎么样)我可以告诉我的实现分配给这张地图的内存量是多少?

dictionary heap-memory go

5
推荐指数
2
解决办法
3207
查看次数

Golang中的字符串内存使用情况

我正在使用map [string] string优化代码,其中map的值仅为“ A”或“ B”。因此,我认为显然,map [string] bool更好,因为该地图可容纳约5000万个元素。

var a = "a"
var a2 = "Why This ultra long string take the same amount of space in memory as 'a'"
var b = true
var c map[string]string
var d map[string]bool

c["t"] = "A"
d["t"] = true

fmt.Printf("a: %T, %d\n", a, unsafe.Sizeof(a))
fmt.Printf("a2: %T, %d\n", a2, unsafe.Sizeof(a2))
fmt.Printf("b: %T, %d\n", b, unsafe.Sizeof(b))
fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c))
fmt.Printf("d: %T, %d\n", d, unsafe.Sizeof(d))
fmt.Printf("c: %T, %d\n", c, …
Run Code Online (Sandbox Code Playgroud)

memory string size go

5
推荐指数
1
解决办法
1857
查看次数

为什么切片值有时会过时但不能映射值?

我发现切片图功能和通道经常一起作为参考类型提及。但是我注意到,切片的东西不会表现出任何参考行为,因为它们可能会过时:

   var s []int
   //must update slice value
   s = append(s, ...) 
Run Code Online (Sandbox Code Playgroud)

要么

   //must use pointer if we want to expose the change
   func foo(s *[]int) error  
   //or change the function signature to return it like _append_
   func foo(s []int) (r slice, err error)
Run Code Online (Sandbox Code Playgroud)

通常,我通过牢记切片描述符实现的内部组件来理解这一点:切片值可以视为len,cap和data指针的结构。

但是地图值永远不需要像

   m := make(map[string]int)
   ...
   // don't know how to express with insertion, but you know what i mean.
   m = delete(m, "well")  
Run Code Online (Sandbox Code Playgroud)

为什么?映射值仅仅是指向映射描述符的指针吗?如果是这样,为什么还不这样做呢?

dictionary pointers reference go slice

1
推荐指数
1
解决办法
122
查看次数

标签 统计

go ×3

dictionary ×2

heap-memory ×1

memory ×1

pointers ×1

reference ×1

size ×1

slice ×1

string ×1