在使用GCC编译Arm Cortex M单片机程序时,代码中使用了结构体,如下所示:
struct MyData { float a; float b; float c; float d; float e; float f; int g; int h; int i; int j; char k; char l; char m; char n; char o; char p; // 下面两个无用,只是站位,保证四字节对齐 char q; char r; }
如果注释掉 char q和char r(这两个无用)sizeof一下结构体变量还是48个字节;
那么是不是可以认为结构体cha 类型的放在最后的情况下(保证前面是四字节对齐的),不用考虑最后的char类型变量对齐到四个字节?
你的试验证明了Cortex-M的GCC自动完成了自己对其。
其实是GCC的一个配置,有些编译链默认开启了自己对齐,有些需要手动配置而已。基本现代编译器都带自动对其功能
字节对齐一般是编译器会自动处理的,不同的编译器或者编译选项效果是不一样的。
所以你的理解对有自动对齐设置时可以这么认为,否则就不行。