我有一个只在数组内部组成的类,例如:
class foo {
public:
// methods
private:
int myarray[10];
};
在其他地方,我有一个包含foo的压缩结构(GCC扩展名):
struct __attribute__((__packed__)) bar {
foo x;
};
但GCC抱怨'foo'没有包装,所以酒吧没有打包。现在,如果我把foo打包好,那么GCC的错误就会消失。我打算在上下文中使用foo,而不是在内部打包的结构中,所以现在我有两个版本的foo,Foo和PackedFoo。然而,看到它们每个只包含一个数组,并且AFAIK在C ++中没有“解包数组”这样的东西,在我拥有Foo并给它打包属性有什么害处吗?当我在包装结构外部使用Foo时,它会以某种方式减慢GCC生成的代码吗?
答案 0 :(得分:1)
如果你的结构中只有整数(或整数数组),那么打包就没有多大意义了。我希望它是无害的。
同样,如果foo
中只有bar
,那么打包将毫无意义。我认为你只是简单地省略了其余内容?
无论如何,你的问题的答案是一个打包的结构(包装它确实有一些效果)将导致程序运行得更慢。如果没有,那么“拆包”结构就没有意义了。如果它不在您的程序的性能关键部分,那可能没有害处。
你不能混合搭配 - 你不能在一个地方访问一个包装,在另一个地方解压缩。那是行不通的。
在应用程序API或网络中使用打包的结构也是不安全的,除非你非常确定它会做什么。打包结构的布局不是标准化的,尽管它通常是可预测的。