gpt4 book ai didi

memory - 如何在 golang 中以字节为单位获取结构的大小及其内容?

转载 作者:IT王子 更新时间:2023-10-29 01:19:05 25 4
gpt4 key购买 nike

我有一个结构,说:

type ASDF struct {
A uint64
B uint64
C uint64
D uint64
E uint64
F string
}

我创建了该结构的一个 slice :a := []ASDF{}

我对结构的那个 slice 进行操作(添加/删除/更新内容不同的结构);我怎样才能得到 slice 及其内容的总大小以字节为单位(用于内存)?是否有内置的方法来执行此操作,或者我是否需要使用 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))
}

输出:

69
54
2
2
147

http://play.golang.org/p/5z30vkyuNM

关于memory - 如何在 golang 中以字节为单位获取结构的大小及其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31496804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com