【问题标题】:Wasted space in layout in CPP Core GuidelinesCPP 核心指南中的布局浪费空间
【发布时间】:2019-06-24 17:57:05
【问题描述】:

我正在阅读 CPP 核心指南,P.9: Don’t waste time or space:

示例,错误:

struct X {
    char ch;
    int i;
    string s;
    char ch2;

    X& operator=(const X& a);
    X(const X&);
};

然后它说:

... 请注意,X 的布局保证至少浪费了 6 个字节(并且很可能更多)。

为什么保证会浪费6个字节?以及如何修复(除了构造函数声明是示例浪费的来源)

【问题讨论】:

标签: c++ cpp-core-guidelines


【解决方案1】:

结构以默认对齐方式开始。第一个成员ch 已对齐。 i 是一个 int 并且必须是四字节对齐的(当 int 是四字节长时),所以在 ch 和 i 之间你会得到三字节填充。在ch2 之后的结构末尾也是如此,您将获得三个字节的填充。插入这些元素是为了让 X x[2]; 两个元素在内存中正确对齐。

struct X {
    char ch;
    char padding1[3]; // so that int i is int-aligned (four bytes)
    int i;
    string s;
    char ch2;
    char padding2[3]; // end of struct must also be aligned
};

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 2017-12-17
    • 2020-05-29
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多