嵌套结构中的数据如何存储和填充?

时间:2016-12-01 22:19:35

标签: c gcc memory struct

看看这两个结构

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可能会因为其小巧性而被填充。虽然chrAchrB可能会合并并在ram中共享相同的单词。

现在,如果我们查看child_t,它会chr2,它本身会被填充。我的问题是chr1chr2是否需要chrAchrB等?如果是这样,那叫什么?

对于这个例子,我假设1个字= 1个短= 2个字符。

1 个答案:

答案 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));

此类代码有效且必须有效。换句话说 - 您描述的优化不会发生。