应该以{{1}}(struct
)成员的名义(按名称或实际上按大小诗歌)声明成员的顺序?如果class
包含用户定义的类型,该怎么办?无论如何,订购struct
成员是否重要?
struct
答案 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;
}
但很明显它真的不友好(考虑更多成员)。
只有在问题成为问题后才对空间进行优化 - 在这种情况下,将小组合并到较大的成员将是一个起点。