Advertisement

关于STM32 32位单片机中结构体struct字节级地址对齐在RAM中的配置的知识

阅读量:

本文参考和整合网络资源,高度概括,简约不简单,一起快乐搬砖

结构体字节对齐说明

本示例全部通过编译器预设的字节边界对齐机制来实现功能说明。STM32开发板在KEIL软件中进行内存分配时,默认采用4字节对齐策略。#pragma pack() //取消自定义字节对齐方式

各字符类型占用字节数(对齐值)

类型 占用内存(对齐值) /字节
char 1
short 2
int 4
float 4
double 8

对齐规则

  1. 起始地址应满足: 起始地址 % 对齐值 = 0
  2. 总字节数应满足: 总字节数 % 最大对齐值 =0

最大对齐值即结构体中占用字节数最多的一个变量的对齐值。

示例1:

按对齐规则1分配空间:

复制代码
    struct A {
    int a;            //a的起始地址0x00满足0x00%4=0,所以a存放在0x00~0x03
    char b;           //b的起始地址0x04满足0x04%1=0,所以b存放在0x04
    short c;          //c的起始地址0x05%2≠0,而0x06%2=0,因此c存放在0x06~0x07,  0x05为补空字节(1

全部评论 (0)

还没有任何评论哟~