声明包含单个数组的struct是否有任何缺点?

时间:2012-02-14 15:50:34

标签: c++ arrays gcc struct alignment

我有一个只在数组内部组成的类,例如:

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生成的代码吗?

1 个答案:

答案 0 :(得分:1)

如果你的结构中只有整数(或整数数组),那么打包就没有多大意义了。我希望它是无害的。

同样,如果foo中只有bar,那么打包将毫无意义。我认为你只是简单地省略了其余内容?

无论如何,你的问题的答案是一个打包的结构(包装它确实有一些效果)导致程序运行得更慢。如果没有,那么“拆包”结构就没有意义了。如果它不在您的程序的性能关键部分,那可能没有害处。

你不能混合搭配 - 你不能在一个地方访问一个包装,在另一个地方解压缩。那是行不通的。

在应用程序API或网络中使用打包的结构也是不安全的,除非你非常确定它会做什么。打包结构的布局不是标准化的,尽管它通常是可预测的。