gpt4 book ai didi

c++ - 如果我对结构的字段进行布局以便它们不需要任何填充,那么符合标准的 C++ 编译器是否可以添加额外的内容?

转载 作者:太空狗 更新时间:2023-10-29 19:48:17 26 4
gpt4 key购买 nike

我想用 C++ 以现有的二进制协议(protocol)格式(我正在编写一个 memcached 客户端)格式化数据包。在 C 中,我可以这样做:

    typedef struct {
uint8_t magic;
uint8_t opcode;
uint16_t keylen;
uint8_t extlen;
uint8_t datatype;
uint16_t reserved;
uint32_t bodylen;
uint32_t opaque;
uint64_t cas;
} request_header;

在 C++ 中,一般情况下,编译器可以在字段之间添加填充。然而,上面的结构是经过仔细布局的,因此所有内容都可以在没有填充的情况下对齐,假设 n 位类型只需要在 n 位边界上对齐。那么在 C++ 中,按照标准,我安全吗?或者一个符合标准的 C++ 编译器是否可以添加额外的填充,从而阻碍我使用它来布置我的位?

最佳答案

这不值得担心,让编译器告诉你这很奇怪:

  static_assert(sizeof(request_header) == 24, "Unexpected packet size");

关于c++ - 如果我对结构的字段进行布局以便它们不需要任何填充,那么符合标准的 C++ 编译器是否可以添加额外的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27953629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com