【发布时间】:2010-12-13 04:19:31
【问题描述】:
在代码审查期间,我遇到了一些定义简单结构的代码,如下所示:
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 进行了尝试,并且在这两个平台上都可以使用。
以上假设是否有效?如果不是,在什么情况下(例如操作系统/编译器的更改)它们可能会失败?
【问题讨论】:
-
@Matthieu:感谢您提醒我们。我敢肯定 OP 忽略了这一点。
标签: c++ data-structures packing bit-packing