关于STM32 32位单片机中结构体struct字节级地址对齐在RAM中的配置的知识
发布时间
阅读量:
阅读量
本文参考和整合网络资源,高度概括,简约不简单,一起快乐搬砖
结构体字节对齐说明
本示例全部通过编译器预设的字节边界对齐机制来实现功能说明。STM32开发板在KEIL软件中进行内存分配时,默认采用4字节对齐策略。#pragma pack() //取消自定义字节对齐方式
各字符类型占用字节数(对齐值)
| 类型 | 占用内存(对齐值) /字节 |
|---|---|
| char | 1 |
| short | 2 |
| int | 4 |
| float | 4 |
| double | 8 |
对齐规则
- 起始地址应满足: 起始地址 % 对齐值 = 0
- 总字节数应满足: 总字节数 % 最大对齐值 =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)
还没有任何评论哟~
