请问编译器会自动优化变量的对齐问题吗?
例如下面这样的代码。uint32_t a;
uint8_t b;
uint32_t c;
uint8_t d
对于32位芯片,应该是需要4字节对齐的。那按常理这4个变量应该占用了13个字节了。
请问在keil里面进行编译的时候,编译器是否会将这几个变量优化成 a,c,b,d 这样排列呢?这样子就只需要占用10字节了。
可能会,甚至丢弃末引用的变量,但不可预测,不同的编译,不同的优化等级,甚至同样的编译器不同的版本,行为也可能完全不一样。
对于普通变量,用户不必理会。 aozima 发表于 2017-11-2 16:12
可能会,甚至丢弃末引用的变量,但不可预测,不同的编译,不同的优化等级,甚至同样的编译器不同的版本,行 ...
你指的普通变量是指怎么样的变量呢? 至少到目前位置, 我还没有发现编译器自动调整存储位置的能力.
不妨可以编译试试. 用生成的 MAP 文件验证就是了 本帖最后由 john_lee 于 2017-11-9 10:30 编辑
原则上可以,而且也应该这样做,但还是要看编译器。
程序里不能假设某个变量与其它变量有固定的位置关系和顺序关系(聚集类型的内部变量之间是有顺序关系的)。 pack
align Atom2004 发表于 2017-11-6 11:41
你指的普通变量是指怎么样的变量呢?
就是像上面描述那样子定义的变量,用int32_t定义的局部或者全局标量。 msblast 发表于 2017-11-9 10:31
pack
align
align的属性应该是指定该变量按照指定的对齐宽度进行对齐吧?和变量间的顺序应该没有关系的吧?
另外请教一下pack是什么含义啊?
页:
[1]