有点不理解 unsafe 的 Sizeof
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是一把双刃剑,建议谨慎使用,仅在必要的高性能场景下考虑。
go中的unsafe包及使用详解
Unsafe code是一种绕过go类型安全和内存安全检查的Go代码。这篇文章主要介绍了go中的unsafe包,需要的朋友可以参考下
golang利用unsafe操作未导出变量-Pointer使用详解
主要给大家介绍了关于golang利用unsafe操作未导出变量-Pointer使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
golang中struct和[]byte的相互转换示例
主要介绍了golang中struct和[]byte的相互转换示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
dotnet C# 将 Byte 二进制数组使用不安全代码快速转换为 int 或结构体数组.rar
开发案列优质学习资料资源工具与案列应用场景开发文档教程资料


