我有一个结构,说:
type ASDF struct {
A uint64
B uint64
C uint64
D uint64
E uint64
F string
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个结构的片段: a := []ASDF{}
我对结构的那一部分进行操作(添加/删除/更新内容不同的结构); 如何获得切片及其内容的总大小(以字节为单位)?是否有内置功能,或者我是否需要手动运行计算unsafe.Sizeof然后使用len每个字符串?
求和所有内存的大小,不包括垃圾收集器和其他开销.例如,
package main
import (
"fmt"
"unsafe"
)
type ASDF struct {
A uint64
B uint64
C uint64
D uint64
E uint64
F string
}
func (s *ASDF) size() int {
size := int(unsafe.Sizeof(*s))
size += len(s.F)
return size
}
func sizeASDF(s []ASDF) int {
size := 0
s = s[:cap(s)]
size += cap(s) * int(unsafe.Sizeof(s))
for i := range s {
size += (&s[i]).size()
}
return size
}
func main() {
a := []ASDF{}
b := ASDF{}
b.A = 1
b.B = 2
b.C = 3
b.D = 4
b.E = 5
b.F = "ASrtertetetetetetetDF"
fmt.Println((&b).size())
a = append(a, b)
c := ASDF{}
c.A = 10
c.B = 20
c.C = 30
c.D = 40
c.E = 50
c.F = "ASetDF"
fmt.Println((&c).size())
a = append(a, c)
fmt.Println(len(a))
fmt.Println(cap(a))
fmt.Println(sizeASDF(a))
}
Run Code Online (Sandbox Code Playgroud)
输出:
69
54
2
2
147
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/5z30vkyuNM