看看这两个结构
struct parent_t
{
short num1;
char chrA;
char chrB;
char chr1;
};
struct child_t
{
struct parent_t parent;
char chr2;
};
正如我们所知,填充可能会添加到struct成员中,以便将其增加到舒适的RAM友好大小。在parent_t
的情况下,chr1
可能会因为其小巧性而被填充。虽然chrA
和chrB
可能会合并并在ram中共享相同的单词。
现在,如果我们查看child_t
,它会chr2
,它本身会被填充。我的问题是chr1
和chr2
是否需要chrA
和chrB
等?如果是这样,那叫什么?
对于这个例子,我假设1个字= 1个短= 2个字符。
答案 0 :(得分:1)
我的问题是chr1和chr2是否会像chrA和chrB那样进行选择?
不,它们不会以您描述的方式进行优化。
原因是sizeof(struct parent_t)
在程序的每个地方都必须相同。
如果它已经优化,则此代码将失败:
struct parent_t p;
struct child_t c;
//... initialize p
memcpy(&c.parent, &p, sizeof(struct parent_t));
此类代码有效且必须有效。换句话说 - 您描述的优化不会发生。