C++ 数据成员对齐和数组打包

标签 c++ data-structures packing bit-packing

在代码审查期间,我遇到了一些定义简单结构的代码,如下所示:

class foo {
   unsigned char a;
   unsigned char b;
   unsigned char c;
}

在其他地方,定义了这些对象的数组:

foo listOfFoos[SOME_NUM];

稍后,这些结构被原始复制到缓冲区中:

memcpy(pBuff,listOfFoos,3*SOME_NUM);

此代码依赖于以下假设:a.) foo 的大小为 3,并且没有应用填充,b.) 这些对象的数组被打包,它们之间没有填充。

我已经在两个平台(RedHat 64b、Solaris 9)上使用 GNU 进行了尝试,并且在这两个平台上都可以使用。

以上假设是否有效?如果不是,在什么情况下(例如操作系统/编译器的更改)它们可能会失败?

最佳答案

这样做肯定更安全:

sizeof(foo) * SOME_NUM

关于C++ 数据成员对齐和数组打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676385/

相关文章:

data-structures - 基数树中术语 "Radix"的意义

c++ - 网络数据打包

c++ - 在 matlab mex 文件中动态链接时枚举的 typeid 发生变化

algorithm - 区间树遍历

c++ - 模拟 scanf ("%1d") for C++ (std::cin)

c++ - 什么是 C 中的通用库?

algorithm - 文本打包算法

c++ - boost中rtree中的打包算法

c++ - 有没有办法在编译时和运行时之间专门化一个函数?

c++ - 获取指向 lambda 的函数指针?