1405|7

970

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

请教一下,字节对齐的问题,是字节多的变量定义在前面,字节少变量定义在后面吗 [复制链接]

邀请:@maychang   @damiaa   @jimtien   @vincentc543   参与回复

请教一下,字节对齐的问题,是字节多的变量定义在前面,字节少变量定义在后面吗

此帖出自stm32/stm8论坛

最新回复

人工凑,能凑齐就放一起。   详情 回复 发表于 2022-11-28 09:26
点赞 关注
 

回复
举报

2万

帖子

0

TA的资源

超级版主

沙发
 

『字节对齐的问题,是字节多的变量定义在前面,字节少变量定义在后面吗』

字节对齐,不是这个意思吧?没有什么 “字节多的变量定义在前面,字节少变量定义在后面”。

此帖出自stm32/stm8论坛
 
 

回复

2万

帖子

0

TA的资源

超级版主

板凳
 

程序中可能定义了若干个一字节变量、若干个二字节变量、若干个四字节变量……编译器只是为这些不同长度的变量按照定义的先后指定首地址,并不区分哪个在低地址哪个在高地址。

此帖出自stm32/stm8论坛
 
 

回复

6788

帖子

2

TA的资源

版主

4
 

不应该这么设计,得看你的系统是几个字节对齐的,如果是4字节对齐,那么就应该尽量让一些小于四字节的变量凑在一起能够组成4个自己。

比如有变量字节数为 1 1 2 2 4 4

那么就不要 设计成 1 4 1 4 2 2 这种

你可以先自行理解一下。

此帖出自stm32/stm8论坛

点评

尽量让那些小字节的变量在一块,1+1+2等于4,那么这些变量就刚好4字节对齐了。 或者可以强制1 2 4等字节对齐,这个你可以搜一下,研究研究~  详情 回复 发表于 2022-11-25 10:56
 
 
 

回复

6788

帖子

2

TA的资源

版主

5
 
wangerxian 发表于 2022-11-25 10:54 不应该这么设计,得看你的系统是几个字节对齐的,如果是4字节对齐,那么就应该尽量让一些小于四字节的变量 ...

尽量让那些小字节的变量在一块,1+1+2等于4,那么这些变量就刚好4字节对齐了。

或者可以强制1 2 4等字节对齐,这个你可以搜一下,研究研究~

此帖出自stm32/stm8论坛
 
 
 

回复

6069

帖子

4

TA的资源

版主

6
 
本帖最后由 damiaa 于 2022-11-25 11:04 编辑

两个事情:字节对齐和大小端

 

字节对齐的问题:字节按照一定规则在空间上排列就是字节对齐。字节对齐的好处:提高效率,节省空间。

比如32位的处理器总线访问内存。每个周期从偶地址开始访问32位内存数据,内存数据以字节为单位存放。如果一个32位的数据没有存放在4字节整除的内存地址处,处理器就需要2个总线周期访问,效率下降。

为使CPU能够对数据进行快速访问,数据的起始地址应具有“对齐”特性。比如4字节数据的起始地址应位于4字节边界上,即起始地址能够被4整除。

字节对齐可以地节省存储空间。

 

大小端模式定义。

Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

STM32:小端模式
STM8:大端
KEIL C51:大端
x86:小端
ARM既可以工作在大端模式,也可以工作在小端模式

此帖出自stm32/stm8论坛

点评

我还以为所有的单片机都是从右向左(大端)数呢  详情 回复 发表于 2022-11-25 17:36
 
 
 

回复

224

帖子

0

TA的资源

一粒金砂(高级)

7
 
damiaa 发表于 2022-11-25 11:01 两个事情:字节对齐和大小端   字节对齐的问题:字节按照一定规则在空间上排列就是字节对齐。字 ...

我还以为所有的单片机都是从右向左(大端)数呢

此帖出自stm32/stm8论坛
 
 
 

回复

7462

帖子

2

TA的资源

五彩晶圆(高级)

8
 

人工凑,能凑齐就放一起。

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表