有点不理解 unsafe 的 Sizeof

pp616 pp616 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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个不就基本通吃了。

...全文

相关推荐

Go unsafe包详解[代码]

本文详细介绍了Go语言中的unsafe包,包括其概述、核心内容及案例分析。unsafe包允许绕过Go的类型系统直接操作内存,虽然在某些高性能场景下非常有用,但使用不当会导致程序崩溃或安全漏洞。文章首先解释了unsafe的概念及使用注意事项,接着深入探讨了unsafe.Pointer、uintptr以及unsafe.Sizeof、Alignof、Offsetof等核心功能。最后通过三个实际案例展示了如何使用unsafe修改结构体私有字段、模拟数组访问以及实现string与[]byte的零拷贝转换。文章强调unsafe是一把双刃剑,建议谨慎使用,仅在必要的高性能场景下考虑。

c6d7e8f9g

go中的unsafe包及使用详解

Unsafe code是一种绕过go类型安全和内存安全检查的Go代码。这篇文章主要介绍了go中的unsafe包,需要的朋友可以参考下

weixin_38656337

golang利用unsafe操作未导出变量-Pointer使用详解

主要给大家介绍了关于golang利用unsafe操作未导出变量-Pointer使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

weixin_38586942

golang中struct和[]byte的相互转换示例

主要介绍了golang中struct和[]byte的相互转换示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38674616

dotnet C# 将 Byte 二进制数组使用不安全代码快速转换为 int 或结构体数组.rar

开发案列优质学习资料资源工具与案列应用场景开发文档教程资料

醒目目
评论 2
收藏 已收藏
分享
返回顶部
pp616
go语言 2,351 成员 924 内容