返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 内存对齐 - 道客巴巴
 新闻简讯存储_DIY电脑硬件频…
 电脑内存条在哪网卡的英文怎…
 显卡资讯-显卡相关资讯-天极…
 什么显卡品牌比较受欢迎 202…
 最新显卡天梯图:2021年4月A…
 显卡_DIY电脑硬件频道_天极网
 2020年双11台式机显卡选购指…
 组装电脑配置清单
 台式机电脑主流配置推荐
 组装机配置清单 2016DIY电脑…
 2016最新主流电脑配置推荐清…
 2020热门品牌游戏主机推荐 不…
 想要避开SMR的坑硬盘就该这样…
 希捷 Osprey 机械硬盘新品经…
 4月硬盘涨价可信吗?炒币不是…
 M2 SSD秒变移动硬盘!酷冷至…
 超大满足!4TB固态硬盘跌破1…
 华硕显卡系列排名
 来看看你的显卡属于几线品牌…
 华硕预告 RTX 4090 显卡:猛…
 全系满功耗显卡!华硕天选4系…
 30系显卡供货稳定3张华硕显卡…
 未来电商高峰论坛在杭召开
 评分高清华同方宽屏16:9
 买海信电视强烈建议这三款观…
 全系灵动岛!iPhone 15系列显…
 视爵光旭启明系列超薄超轻小…
 创维75英寸超薄护眼巨幕影院…
 CPU性能排行天梯图2019 CPU天…
 紫光发布Unis L3891笔记本电…
 有了笔记本充电柜学校再也不…
 2023年Q1季度搭载酷睿i9-139…
 【巽雷周年庆】满额抽大奖送…
 主板全面注册制开门纳客:“…
 2023年预算8千封顶大概能装台…
 冲刺深交所主板IPO:阿宽食品…
 全面注册制首批IPO迎“大考”…
 推荐三款AMD锐龙5 5600G5600…
 冲着外观去的没想到这么能超…
 佰维存储:公司目前暂未涉及…
 “APP刺客”倒逼厂商升级大内…
 前三大内存供应商占前沿制程…
 淘汰8GB 一加Ace 2V手机普及…
 AMD承认Radeon显卡驱动错误 …
 慧聪产经网_慧聪产业经济
 显示器小科普_游戏_支持_都能
 硬核配置强悍性能三星玄龙骑…
 国产十大显示器品牌 (国产最…
 显示器的那些4K曲屏无边框是…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
内存对齐 - 道客巴巴
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/3/8 5:39:18 | 【字体:

  帝国骄阳1 //环境:vc6 + windows sp2 2 //程序1 3 #include iostream 4 5 using namespace std; 6 7 struct st1 8 { 9 char a ; 10 int b ; 11 short c ; 12 }; 13 14 struct st2 15 { 16 short c ; 17 char a ; 18 int b ; 19 }; 20 21 int main() 22 { 23 coutsizeof(st1) is sizeof(st1)endl; 24 coutsizeof(st2) is sizeof(st2)endl; 25 return 0 ; 26 } 27 程序的输出结果为: sizeof(st1) is 12 sizeof(st2) is 8 问题出来了,这两个一样的结构体,为什么 sizeof 的时候大小不一样呢? 本文的主要目的就是解释明白这一问题。 内存对齐,正是因为内存对齐的影响,导致结果不同。 对于大多数的程序员来说,内存对齐基本上是透明的,这是编译器该干的活,编译器为程序中的每个数据单元安排在合适的位置上,从而导致了相同的变量,不同声明顺序的结构体大小的不同。 那么编译器为什么要进行内存对齐呢?程序 1中结构体按常理来理解 sizeof(st1) 和sizeof(st2) 结果都应该是 7,4(int) + 2(short) + 1(char) = 7 。经过内存对齐后,结构体的空间反而增大了。 在解释内存对齐的作用前,先来看下内存对齐的规则: !--[if !supportLists]--1 、 !--[endif]-- 对于结构的各个成员,第一个成员位于偏移为 0的位置,以后每个数据成员的偏移量必须是 min(#pragma pack() 指定的数,这个数据成员的自身长度 ) 的倍数。 !--[if !supportLists]--2 、 !--[endif]-- 在数据成员完成各自对齐之后,结构 (或联合)本身也要进行对齐, 对齐将按照 #pragma pack 指定的数值和结构 (或联合)最大数据成员长度中,比较小的那个进行。 #pragma pack(n) 表示设置为 n 字节对齐。 VC6默认8字节对齐 以程序1为例解释对齐的规则: St1 :char 占一个字节,起始偏移为 0 ,int 占4个字节, min(#pragma pack() 指定的数,这个数据成员的自身长度 ) = 4(VC6默认8字节对齐),所以 int 按4字节对齐,起始偏移必须为 4的倍数,所以起始偏移为 4,在 char 后编译器会添加 3个字节的额外字节,不存放任意数据。 short 占2个字节,按 2字节对齐,起始偏移为 8,正好是 2的倍数,无须添加额外字节。到此规则 1的数据成员对齐结束,此时的内存状态为: oxxxoooooo 0123 4567 89 (地址)(x 表示额外添加的字节) 共占10个字节。还要继续进行结构本身的对齐,对齐将按照 #pragma pack 指定的数值和结构 (或联合)最大数据成员长度中,比较小的那个进行, st1结构中最大数据成员长度为 int,占4字节,而默认的 #pragma pack 指定的值为 8,所以结果本身按照 4字节对齐,结构总大小必须为 4的倍数,需添加2个额外字节使结构的总大小为 12 。此时的内存状态为: oxxxooooooxx 0123 4567 89ab (地址) 到此内存对齐结束。 St1占用了12个字节而非 7个字节。 St2 的对齐方法和 st1相同,读者可自己完成。 内存对齐的主要作用是: !--[if !supportLists]--1 、 !--[endif]-- 平台原因 (移植原因 ):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据, 否则抛出硬件异常。 !--[if !supportLists]--2 、 !--[endif]-- 性能原因:经过内存对齐后, CPU 的内存访问速度大大提升。具体原因稍后解释。 图一: 这是普通程序员心目中的内存印象,由一个个的字节组成,而 CPU 并不是这么看待的。 图二: CPU 把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此 CPU 在读取内存时是一块一块进行读取的。块大小成为 memory access granularity (粒度) 本人把它翻译为“内存读取粒度” 。 假设 CPU 要读取一个 int 型4字节大小的数据到寄存器中,分两种情况讨论: !--[if !supportLists]-- 1、 !--[endif]-- 数据从0字节开始 !--[if !supportLists]-- 2、 !--[endif]-- 数据从1字节开始 再次假设内存读取粒度为4。 图三: 当该数据是从0字节开始时,很 CPU 只需读取内存一次即可把这4字节的数据完全读取到寄存器中。 当该数据是从1字节开始时,问题变的有些复杂,此时该 int 型数据不是位于内存读取边界上,这就是一类内存未对齐的数据。 图四: 此时 CPU 先访问一次内存,读取03字节的数据进寄存器,并再次读取45字节的数据进寄存器,接着把0字节和6,7,8字节的数据剔除,最后合并1,2,3,4字节的数据进寄存器。对一个内存未对齐的数据进行了这么多额外的操作,大大降低了CPU 性能。 这还属于乐观情况了,上文提到内存对齐的作用之一为平台的移植原因,因为以上操作只有有部分 CPU 肯干,其他一部分 CPU 遇到未对齐边界就直接罢工了。 图片来自: Data alignment: Straighten up and fly right 如大家对内存对齐对性能的具体影响情况,可以参考上文。

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 内存对齐 - 道客巴巴 (03-08)
    普通电脑内存 新闻简讯存储_DIY电脑硬件频道-YESKY天极网 (03-08)
    普通电脑内存 电脑内存条在哪网卡的英文怎么写 (03-08)
    普通电脑内存 冲着外观去的没想到这么能超十铨科技DELTA炫光… (03-07)
    普通电脑内存 佰维存储:公司目前暂未涉及HBM内存产品 (03-07)
    普通电脑内存 “APP刺客”倒逼厂商升级大内存、大存储!8+1… (03-07)
    普通电脑内存 前三大内存供应商占前沿制程产能的四分之三 (03-07)
    普通电脑内存 淘汰8GB 一加Ace 2V手机普及16GB:没大内存就… (03-07)
    普通电脑内存 手机行业普及大内存?“APP刺客”立大功 (03-07)
    普通电脑内存 红米K50是5G双卡双待吗 pro可以插内存卡吗? (03-07)
    普通电脑内存 13400支持多少频率内存 (03-06)
    普通电脑内存 AMD和Intel至今没有放开桌面四通道和RECC内存… (03-06)
    普通电脑内存 DDR5内存也要上双风扇 (03-06)
    普通电脑内存 256GB被吃掉220GBiOS13用户注意了:苹果怎么释… (03-06)
    普通电脑内存 市交通委谈“2022年北京冬奥会延庆赛区外围道… (03-06)
    普通电脑内存 中国最强天团「外交部」的英文翻译有多牛?连… (03-06)
    普通电脑内存 写公文时为什么要用仿宋GB2312字体? (03-06)
    普通电脑内存 手机存储里的提示视频占用三十多G为什么点进去… (03-05)
    普通电脑内存 到底什么是视频中台? (03-05)
    普通电脑内存 为什么用手机录制的视频内存占比这么大几分钟… (03-05)