相关疑难解决方法(0)

如何获取变量的内存大小?

有谁知道如何获得变量的内存大小(int,string,[]struct等),并打印出来?可能吗?

var i int = 1
//I want to get something like this:
fmt.Println("Size of i is: %?", i)
//Also, it would be nice if I could store the value into a string
Run Code Online (Sandbox Code Playgroud)

memory-management runtime go

22
推荐指数
4
解决办法
3万
查看次数

如何在golang中获取变量的内存大小?

我好奇的存储成本mapslice,所以我写了一个程序来比较大小.我得到了内存大小unsafe.Sizeof(s),但显然是错误的,因为当我改变大小时,输出是相同的.

func getSlice(size int) []int {
    t := time.Now()
    s := make([]int, size*2)
    for i := 0; i < size; i++ {
        index := i << 1
        s[index] = i
        s[index+1] = i
    }
    fmt.Println("slice time cost: ", time.Since(t))
    return s
}

func getMap(size int) map[int]int {
    t := time.Now()
    m := make(map[int]int, size)
    for i := 0; i < size; i++ {
        m[i] = i
    }
    fmt.Println("map time cost: ", time.Since(t))
    return m …
Run Code Online (Sandbox Code Playgroud)

memory dictionary go slice

6
推荐指数
2
解决办法
5894
查看次数

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
查看次数

如何使用 unsafe 从没有内存复制的字符串中获取字节切片

我已经阅读了关于“ https://github.com/golang/go/issues/25484 ”关于从[]byteto 的无复制转换string

我想知道是否有办法将字符串转换为没有内存复制的字节片?

我正在编写一个处理 terra 字节数据的程序,如果每个字符串在内存中复制两次,则会减慢进度。而且我不关心可变/不安全,只关心内部使用,我只需要尽可能快的速度。

例子:

var s string
// some processing on s, for some reasons, I must use string here
// ...
// then output to a writer
gzipWriter.Write([]byte(s))  // !!! Here I want to avoid the memory copy, no WriteString
Run Code Online (Sandbox Code Playgroud)

所以问题是:有没有办法防止内存复制?我知道也许我需要 unsafe 包,但我不知道如何。我已经搜索了一段时间,直到现在还没有答案,SO 也没有显示相关的答案有效。

string performance go slice

4
推荐指数
4
解决办法
3321
查看次数