订购struct成员

时间:2014-01-20 09:21:43

标签: c++ class struct

应该以{{1​​}}(struct)成员的名义(按名称或实际上按大小诗歌)声明成员的顺序?如果class包含用户定义的类型,该怎么办?无论如何,订购struct成员是否重要?

struct

3 个答案:

答案 0 :(得分:3)

从逻辑上订购它们非常重要。订单在实践中很少有所作为。 (如果你有非常大的对象类型数组和有限的内存,按大小顺序排列它们,从最大到最小,可能会导致内存使用量略有减少,但实际上,这很少和问题。)

答案 1 :(得分:1)

如果您不在内存受限的环境中工作,那么以合理的方式组织您的成员 - 通过他们的责任,使其更容易使用。目前您的会员拥有无挖掘的名称,因此很难提出任何建议。

如果要分析编译器如何布局结构/类,可以在Visual Studio中使用/d1reportAllClassLayout(未记录的)编译器参数等工具。对于您的课程,它输出:

1>class foo size(8):
1> +---
1> 0 | data0
1>   | <alignment member> (size=2)
1> 4 | data1
1> +---
1>class bar size(20):
1> +---
1> 0 | data0
1> 4 | data1
1>   | <alignment member> (size=3)
1> 8 | data2
1>12 | foo data3
1> +---

所以看起来因为对齐而丢失了5个字节,你可以在对齐位置添加其他成员,而且不需要额外的内存。

答案 2 :(得分:0)

为了更好的可读性而订购它们。

最佳(内存方式)布局可能是:

struct X
{
    short flag1;
    short flag2;
    short flag3;
    short flag4;

    double x;

    short flag5;
}

但很明显它真的不友好(考虑更多成员)。

只有在问题成为问题后才对空间进行优化 - 在这种情况下,将小组合并到较大的成员将是一个起点。