基于STM32L073的工程,申请了一个结构体:typedef struct { uint16_t TUV_P_Threshold; // 0x2000095C uint16_t TUV_P_Delay; uint16_t TUV_PR_Threshold; uint16_t TUV_PR_Delay; uint16_t DUV_P_Threshold; // 0x20000964 uint16_t DUV_P_Delay; uint16_t DUV_PR_Threshold; uint16_t DUV_PR_Delay; // 0x2000096A int32_t DOC_P1_Threshold; // 0x2000096C uint16_t DOC_P1_Delay; // 0x20000970 int32_t DOC_P2_Threshold; // 0x20000972 uint16_t DOC_P2_Delay; // 0x20000978 int32_t DOC_APR_Threshold; // 0x2000097A uint16_t DOC_APR_Delay; // 0x20000980 } 从实际内存分配上看int32_t DOC_P1_Threshold和int32_t DOC_P2_Threshold、DOC_APR_Threshold所占byte不一样,理论上int32_t 应该占4byte,但 DOC_P1_Threshold占了2byte,而DOC_P2_Threshold和DOC_APR_Threshold却占了6byte,如下图: |
定义时,同类型的放到一起,或者仍掉一部分。或者自己想办法凑一下,让以32位对齐。
评分
查看全部评分
u8 a
u8 b
u32 c
这样组成的结构体,你觉得占多少ram?在4字节(大部分都是这个对齐,也有其他的)对齐的情况下是8个byte...因为a、b占用了两个byte后,剩下的2byte无法被c使用,只能从头开始。。。我这里呢只是列举了个大概,还有其他各种考虑,百度上面有具体解释的!!!
评分
查看全部评分
评分
查看全部评分
明白了,多谢
字节对齐问题,明白了,多谢