有点不理解 unsafe 的 Sizeof

pp616 2023-02-08 16:39:02
package main

import (
    "fmt"
    "unsafe"
)

type A struct {
    x int32
    y int64
}

type B struct {
    x int64
    y byte
}

type C struct {
    x [4]byte
    y int64
}

type D struct {
    x int64
    y [3]byte
}


func main() {
    fmt.Printf( "%v\n", unsafe.Sizeof( A{} ) )
    fmt.Printf( "%v\n", unsafe.Sizeof( B{} ) )
    fmt.Printf( "%v\n", unsafe.Sizeof( C{} ) )
    fmt.Printf( "%v\n", unsafe.Sizeof( D{} ) )
}

谁能不跑代码告诉我结果 并且解释下为什么吗?? 

昨天刚升的1.20 之前用的1.17.5 今天用GO写文件C++读 发现全是乱的 两边数据类型定义也比对的没问题 找半天然后写的个测试代码看看GO的sizeof到底什么情况 结果很不能理解了 ,你要字节对齐也不至于不按结构定义来吧。这么搞要那么多数据类型做什么 直接int64 和 float64 2个不就基本通吃了。

...全文
290 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘帝阁 2023-02-27
  • 打赏
  • 举报
回复
都是16,每当遇到字节长度较大字段时,下一次就会以当前最大长度对齐,所以对齐系数都是8
Junebao 2023-02-09
  • 打赏
  • 举报
回复

不都是 128 bit 吗?

2,197

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧