结构的成员按照它们在声明中出现的顺序在结构内分配,并且具有升序地址。
我面临以下困境:当我需要声明一个结构时,我是否
(1) 对字段进行逻辑分组,或
(2)按大小递减顺序,节省RAM和ROM的大小?
这是一个示例,其中最大的数据成员应该在顶部,但也应该与逻辑连接的分组colour
:
struct pixel{
int posX;
int posY;
tLargeType ColourSpaceSecretFormula;
char colourRGB[3];
}
结构的填充是不确定的(即依赖于实现),因此我们不能可靠地对结构元素进行指针运算(我们不应该:想象有人根据自己的喜好重新排序字段:BOOM,整个代码停止工作)。
-fpack-structs在 gcc 中解决了这个问题,但有其他限制,所以让我们把编译器选项排除在外。
另一方面,代码首先应该是可读的。应不惜一切代价避免微优化。
所以,我想知道,为什么结构的成员按标准排序,让我担心以特定方式排序结构成员的微优化?