在进行代码审查时,我看到了一些定义简单结构的代码:
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 64位,Solaris 9)尝试过,并且在两个平台上都可以运行。
以上假设是否有效?如果无效,那么在什么条件下(例如更改操作系统/编译器)可能会失败?