最新要闻
- 智慧医疗让看病更便捷-新资讯
- 马斯克扔下车圈核弹:特斯拉FSD可以给其他车企用!-每日热点
- 小米又一爆款诞生!小米手环8国内出货破110万:上市不到俩月 全球短讯
- 价值或达500亿 国铁大规模采购动车组:350公里时速复兴号就有103组
- 疑似比亚迪F品牌官方账号成立:名为“方程豹汽车”
- 奇瑞杀疯了!5月销量近14万辆 一路反超吉利、长城
- 世界热讯:电解槽和氢能矿卡上榜内蒙古2023年技术装备首台(套)名单
- 小学生发现深沟露出车轮救人一命被网友点赞心细:老人驾老头乐失控导致
- 天天热点评!全球第一套!龙芯2K1500控制器不间断运行142天3408小时
- 喝酒去世网红家墙壁写着钱比命重要 网友唏嘘!家人:从没割过粉丝韭菜
- 新品未能提振股价,苹果概念股跌幅扩大,华兴源创、长盈精密跌超15% 环球快讯
- 【天天速看料】一条视频带你回忆高三这一年 网友感动:祝愿每位考生忙而不茫
- 《暗黑破坏神4》正式发售:标准版终于能玩了
- 苹果Vision Pro头戴支持近视用户:需额外掏钱买插片-世界观焦点
- 牛骨头汤有营养吗 牛骨头汤是否有营养
- 苹果XR头显Vision Pro王炸登场:3499美元起售,2024年开卖-环球观天下
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点速看:如何让你的结构体更高效
文中所涉及到的代码运行结果均是在64位机器上执行得到的.
基础知识回顾
在Go中,我们可以使用unsafe.Sizeof(x)
来查看变量所占的内存大小。以下是Go内置的数据类型占用的内存大小:
(资料图片)
类型 | 内存大小(字节数) |
---|---|
bool | 1 |
int8/uint8 | 1 |
int/uint | 8 |
int32/uint32 | 4 |
int64/uint64 | 8 |
float32 | 4 |
float64 | 8 |
complex64 | 8 |
complex128 | 16 |
指针类型:*T, map,func,chan | 8 |
string | 16 |
interface | 16 |
[]T | 24 |
func main() {fmt.Println(unsafe.Sizeof(true)) // 1fmt.Println(unsafe.Sizeof(int8(1))) // 1fmt.Println(unsafe.Sizeof(int(1))) // 8fmt.Println(unsafe.Sizeof(int32(1))) // 4fmt.Println(unsafe.Sizeof(int64(1))) // 8fmt.Println(unsafe.Sizeof(float32(1.0))) // 4fmt.Println(unsafe.Sizeof(float64(1.0))) // 8a := int(1)fmt.Println(unsafe.Sizeof(&a)) // 8s := "1234"fmt.Println(unsafe.Sizeof(s)) //16var b interface{}fmt.Println(unsafe.Sizeof(b)) //16fmt.Println(unsafe.Sizeof([]string{})) // 24fmt.Println(unsafe.Sizeof([]int{})) // 24}
简单示例
对于一个结构体,其占用的内存大小应该是其内部多个基础类型占用内存大小之和。但实际情况并非如此,甚至字段顺序不同,结构体的大小也不同:
type Example1 struct {a int32 // 4b int32 // 4c int64 // 8}type Example2 struct {a int32 // 4c int64 // 8b int32 // 4}type Example3 struct {a bool // 1b int8 // 1c string // 16}func main() {fmt.Println(unsafe.Sizeof(Example1{})) // 16fmt.Println(unsafe.Sizeof(Example2{})) // 24 fmt.Println(unsafe.Sizeof(Example3{})) // 24,并不是1+1+16=18}
为什么会出现上面的情况呢?这就引出了本文的重点:内存对齐。
内存对齐
内存对齐(Memory Alignment)是指数据在计算机内存中存储时按照特定规则对齐到内存地址的过程。内存对齐是由计算机硬件和操作系统所决定的,它可以提高内存访问效率和系统性能。
在计算机体系结构中,内存是以字节(byte)为单位进行访问的。数据类型在内存中占用的字节数可以是不同的,例如,整数可能占用2字节、4字节或8字节,而字符可能只占用1字节。
内存对齐的规则要求变量的地址必须是其数据类型字节数的整数倍。例如,如果一个变量的数据类型是4字节(32位),那么它的起始地址必须是4的倍数。
内存对齐的主要目的是优化计算机的内存访问性能。当数据按照对齐要求存储在内存中时,读取和写入操作可以更高效地进行。如果数据没有按照对齐要求存储,计算机可能需要进行多次内存读取操作来获取完整的数据,这会增加访问延迟和降低系统性能。
在编程中,特别是在使用结构体和类的语言中,内存对齐是一个重要的概念。编译器会根据数据类型的对齐要求自动进行内存对齐操作,以确保数据存储的正确性和性能优化。但在某些情况下,可以通过显式地设置对齐属性来控制数据的对齐方式,以满足特定的需求。
需要注意的是,不同的硬件平台和操作系统可能具有不同的内存对齐规则和要求。因此,在开发跨平台应用程序时,应当考虑到这些差异并遵循适当的内存对齐规则。
为什么需要对齐内存
内存对齐是为了提高计算机系统的内存访问效率和性能而存在的。以下是几个需要内存对齐的原因:
- 硬件要求:许多计算机硬件和体系结构对内存访问有特定的对齐要求。如果数据没有按照硬件要求进行对齐,可能会导致访问错误、异常或性能下降。通过满足硬件对齐要求,可以确保数据能够按照有效的方式访问,提高系统的稳定性和性能。
- 内存访问效率:当数据按照对齐要求存储在内存中时,计算机系统可以更高效地访问这些数据。对齐数据可以减少或避免多次内存访问,提高数据的读取和写入速度。这对于大量的数据操作和高性能计算非常重要。
- 缓存性能:现代计算机系统中通常有多级缓存,而缓存的访问是以特定块的方式进行的。内存对齐可以确保数据按照缓存块的大小对齐,使得数据能够更好地利用缓存,减少缓存未命中和读取延迟,提高缓存性能。
- 结构体和类的内存布局:结构体和类通常包含多个成员变量,这些变量按照一定的顺序存储在内存中。内存对齐确保结构体和类的成员变量按照正确的顺序和对齐要求进行存储,避免内存空洞和访问错误,保证数据的正确性和一致性。
总之,内存对齐是为了满足硬件要求、提高内存访问效率和性能而引入的机制。通过合理地进行内存对齐,可以提高系统的稳定性、性能和响应速度,并避免潜在的内存访问问题。
如何对齐内存
Go团队开发了一款名为fieldalignment
的工具可以帮助我们解决内存对齐的问题。
使用下面的命令安装fieldalignment
工具:
$ go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
还是以上面的代码为例,可以执行下面的命令:
$ fieldalignment main.go main.go:14:15: struct of size 24 could be 16 main.go:20:15: struct with 16 pointer bytes could be 8
也可以使用--fix
参数直接修改代码:
$ fieldalignment --fix main.go
修改后的内容如下:
type Example1 struct {a int32 // 4b int32 // 4c int64 // 8}type Example2 struct {c int64a int32b int32}type Example3 struct {c stringa boolb int8}
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。Author: mengbinblog: mengbinGithub: mengbin92cnblogs: 恋水无意
关键词:
-
【专为苛刻的数据环境而构建】上海道宁为您带来世界上先进的矢量原生、时间序列和实时分析数据库——kdb系列产品|世界新消息
kdb是高效的矢量原生、时间序列和实时分析数据库,专为高性能矢量数据驱
来源: 焦点速看:如何让你的结构体更高效
【专为苛刻的数据环境而构建】上海道宁为您带来世界上先进的矢量原生、时间序列和实时分析数据库——kdb系列产品|世界新消息
天天快消息!提升生产线效率与质量:智慧工厂的优势与应用
Java-模板生成PDF方式2-PDFBox
智慧医疗让看病更便捷-新资讯
马斯克扔下车圈核弹:特斯拉FSD可以给其他车企用!-每日热点
小米又一爆款诞生!小米手环8国内出货破110万:上市不到俩月 全球短讯
价值或达500亿 国铁大规模采购动车组:350公里时速复兴号就有103组
疑似比亚迪F品牌官方账号成立:名为“方程豹汽车”
奇瑞杀疯了!5月销量近14万辆 一路反超吉利、长城
世界热讯:电解槽和氢能矿卡上榜内蒙古2023年技术装备首台(套)名单
Web安全-渗透测试-基础知识03
小学生发现深沟露出车轮救人一命被网友点赞心细:老人驾老头乐失控导致
天天热点评!全球第一套!龙芯2K1500控制器不间断运行142天3408小时
喝酒去世网红家墙壁写着钱比命重要 网友唏嘘!家人:从没割过粉丝韭菜
“宇宙猜想”CTO叶云出席元宇宙论坛并发表演讲
新品未能提振股价,苹果概念股跌幅扩大,华兴源创、长盈精密跌超15% 环球快讯
饶派杯 XCTF 车联网挑战赛 mqttsvr 复现|当前观点
【天天速看料】一条视频带你回忆高三这一年 网友感动:祝愿每位考生忙而不茫
《暗黑破坏神4》正式发售:标准版终于能玩了
苹果Vision Pro头戴支持近视用户:需额外掏钱买插片-世界观焦点
牛骨头汤有营养吗 牛骨头汤是否有营养
读改变未来的九大算法笔记05_数字签名
Git hooks与自动化部署-全球新消息
每日聚焦:直播平台源码画面质量功能的实现
云图说|ModelArts开发环境,让AI开发、探索、教学更简单 世界新要闻
苹果XR头显Vision Pro王炸登场:3499美元起售,2024年开卖-环球观天下
经常挖鼻孔会影响颜值 严重可诱发颅内感染
天天观热点:小米王腾分享苹果Vision Pro看法:令人赞叹、但普及需要时间
QQ空间18周岁 第一代美女网红鼻祖露面:16年没变样
压力给到合资品牌 上汽大众永久关停第一工厂:部分产线搬迁|全球要闻
全国爱眼日,王贾桥小学倡导学子保护视力、珍爱光明
linux tar解压命令总结
速讯:848中国鱼类资料图谱大全ACCESS\EXCEL数据库
顶象无感验证码助力京客隆提升数字化运营能力
MySQL用户与权限管理_每日热门
全球快播:电池级碳酸锂价格重回30万元/吨 锂盐厂商二季度业绩可期
抄底!百度网盘超级会员年卡178元:送优酷+喜马拉雅 世界实时
防止别人蹭热点 苹果Vision Pro完全不提元宇宙三个字
16.99万起!零重力座椅、无框车门、三种动力选择 长安深蓝S7即将上市
制作成本16.5亿!《封神三部曲》第一部定档:7月20日上映 焦点速读
天天消息!孙俪代言!超能双离子洗衣粉骨折价大促:39.9元11斤
国内卫浴二线品牌有哪些_国内卫浴二线品牌-最新
低利率环境与发行优势助推 商业银行绿色金融债发行火热
抽检合格率97.26%!江西加强中高考期间校园食品安全监管
阿根廷中国行 花30万可让梅西敬酒、合影?官方回应
续航2小时、仅售2万5!苹果首款AR眼镜开卖:还有半年时间攒钱
天天观天下!《暗黑4》德鲁伊玩家发声:不要随便攻击熊熊!
移动SSD也白菜价了!梵想PS2000 1TB只要279元 不到小米一半
天天日报丨天猫京东红包加码!最高23888元 每天最多领3次
阿根廷中国行 花30万可让梅西敬酒、合影?官方回应
在 Linux 中使用 sFTP 上传或下载文件与文件夹
日本工人的实际工资在4月份继续下降,尽管已经反映了在年度薪资谈判中所取得的加薪,这给考虑召集选举的首相岸田文雄带来挑战|天天时讯
环球速递!76核核显GPU足以毁天灭地 苹果Mac Pro不支持任何独显
今亮点!AMD确认锐龙8000明年问世:Zen5 CPU、亮机核显大升级
iPhone不用再说“嘿 Siri”了!可能不好用:用户担忧误唤醒_每日快讯
烤串巨无霸!广西烧烤竹签长1米8:网友直呼开眼 一串吃饱|热点评
精彩看点:李宁获摩根大通增持1117.05万股 最新持股比例为5.07%
全国中成药集采分组等多项信息公布 96家药企参与申报 多个品种竞争激烈
国际金融市场早知道:6月6日
取代iPhone?苹果发布首款MR头显Vision Pro:卖到2.5万天价
资讯:实用性看齐安卓?这就是iOS/iPad OS 17 苹果已推送测试版:iPhone 8、X被弃
天天简讯:《小美人鱼》全球票房突破3亿美元 黑美人鱼欢呼:大家还是爱看我的
独立在轨33天 状态良好:天舟五号与空间站组合体再次对接 时讯
7月14日上映!《碟中谍7》发布新剧照:59岁阿汤哥骑摩托冲下悬崖 头条焦点
龙岗生态司法修复基地揭牌 天天动态
24800元的苹果Vision Pro发布 一文看懂WWDC23有多硬!
母亲病危家人让高考孩子见最后一面 网友争议:高考高于亲情?|天天微速讯
天弘中证沪港深线上消费主题交易型开放式指数证券投资基金基金产品资料概要(更新)
环球热点!SD协议-时序
JAVA学习笔记_基础篇01
基于 log4j2 插件实现统一日志脱敏,性能远超正则替换-焦点信息
焦点观察:MRST绘制三维网格图
每日焦点!生态河湖 诗画江城
2.4万元!苹果首款MR头显Vision Pro发布:单眼像素超越4K电视
真颠覆XR!苹果Vision Pro技术、体验几乎完美 但是一根线毁所有|世界快报
苹果Mac三大新品国行价格汇总:巅峰顶配9.7万元-环球速看
8450米的珠峰上舍命救人 女子承诺1万美元只肯给4000美元:贵吗?
1100万年后 决定性别的Y染色体将消失:人类会怎么样?
旅游景区清洁工人工作情况影像记录带定位时间时间水印相机
全球动态:父母去世了,为子女买的保险能用遗产续费吗?
天天讯息:高中教材选修和必修有什么区别_高中必修是什么意思 选修呢
油毡纸多少钱一卷(油毡纸) 环球播资讯
当前短讯!不负如来不负卿txt下载完整版_不负如来不负卿txt下载
UFOU首获投资,升降桌售价上万元有人望而却步,孟振亮曾连续创业
每日短讯:管理能力有哪些方面_能力有哪些方面
阿里云宣布举办首届AI黑客马拉松挑战赛 最终获胜团队将获得3万奖金
现实题材电影《八角笼中》发布一“骗”真心版预告 由王宝强与肖央主演
人造电子皮肤首次亮相 每层主干均为长分子链组成
美国一男子连吃100天麦当劳后减重53斤 网友困惑垃圾食品是否需重新定义
巴奴火锅反向推出“天价土豆”套餐 套餐几乎囊括巴奴所有热门菜品
日本地下偶像女子团体成员灌男粉丝喝洗洁精 看其吐泡泡后捧腹大笑
在线访问量直线飙升 OpenAI已跻身全球20家流量最高网站榜单
2023年夏日游戏节发布预热宣传片 将于6月9日进行直播
比亚迪上调部分车型的保养费 幅度达到50%左右
清华大学成立秀钟书院:今年开始招生 目标宏大_当前热文
语音系统用上全自研算法!李想:95%以上控制张嘴就能搞定-天天亮点
浙江大学学生被录用为“场务及驱鸟员” 网友惊呼太卷了
创美药业(02289)将于7月31日派发末期股息每股0.45元
hackthebox sniper medium