我有一个类似于这种情况的问题
struct Child
{
u16 x, y;
// other fields
};
struct Father
{
struct Child child1;
struct Child child2;
// other fields
};
Father tilemap[WIDTH][HEIGHT];
现在我意识到我想为x,y省下四个字节,因为它们总是为同一个父级的两个孩子设置相同的值。
在我的代码中,我传递了许多Father*和Child*,同时使用father->child1->x或child1->x来恢复坐标。我想在Father级别上安全地移动坐标,但我对某些事情不确定。
声明字段的顺序是否会受到gcc/g++的任何优化或可能实现的影响而得到尊重?我能否确信&father == &father.child1?
真正的问题在于,我传递了Child*,却不知道它是child1还是child2字段,因此我无法直接知道恢复父级地址(及其坐标)的偏移量。我想在Child级别上使用一个位来区分它们,但我能轻松地恢复父级的地址吗?
如果有任何建议,将不胜感激,谢谢。
编辑:作为进一步的信息,我使用C++作为主要语言,但这些结构不包含任何奇怪的方法,仅包含字段和空构造函数。