gpt4 book ai didi

c++ - 固定大小结构

转载 作者:太空狗 更新时间:2023-10-29 20:41:30 25 4
gpt4 key购买 nike

struct my_struct
{
char a;
short b;
int c;
};

sizeof(my_struct) 在不同的机器上可能会有所不同(任何标准 c++ 类型的大小可能会有所不同)。它也取决于内存对齐(#pragma pack(*) 等)。实现固定大小结构的最佳方式是什么?

最佳答案

如果您对您的目标平台有一定的现实性和知识,您可以很容易地找到一些共同点并将其用作您的结构的基础。

例如,如果您的目标平台是在当前 x86 硬件上运行的 Windows 和 Linux,那么您已经知道一些事情:

  • char 根据标准正好是 1 个字节
  • 1个字节是8位
  • int8_tuint8_t 在 C++11 下恰好是 8 位(无论如何大多数 C++03 编译器都提供这些)
  • int16_tuint16_t 在C++11下正好是16位
  • int32_tuint32_t 在 C++11 下正好是 32 位
  • int64_tuint64_t 在 C++11 下正好是 64 位
  • C 风格的 ASCII 字符串是以 NULL 结尾的 char 数组
  • 预处理器指令可用于控制打包

Endianness仍然是一个问题,因此在转换多字节类型时您将不得不处理这个问题。

试图设计一种由标准保证在所有奇异平台上在线路上具有相同二进制表示的结构是不可能的。您可以仅使用 char 来接近,但即使那样也无法保证,因为您不知道一个字节中有多少位。

您可以尝试使用 bitfields来表示您的数据,但您仍然不知道一个字节中有多少位,因此您无法确定最后将添加多少填充。

可移植性有一个目的:可移植代码比特定于平台的代码更容易维护和扩展。为了可移植性而追求可移植性是一个学术目标,在专业编程中没有立足之地。另一方面,为了可维护性而追求可移植性是一个值得称赞的目标,但它也是一种平衡行为。如果您提出了一个适用于所有可能平台的完全可移植的解决方案,但您将只能在其中两个平台上运行并且您的代码无法维护,那么意义何在?

关于c++ - 固定大小结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093648/

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