2013-10-24 81 views
0

我需要从视图优化点在透视:嵌套晶格结构

我有一些字段的结构:

struct cmp { 
    uint64_t count; 
    uint8_t var; 
    uint64_t val_1; 
    uint16_t val_2; 
}; 

一些我有一个可以移动到另一个领域结构:

struct Field { 
    uint8_t var; 
    uint64_t val_1; 
    uint16_t val_2; 
}; 

从代码的可读性,这是一个更好的选择:

struct cmp { 
    uint64_t count; 
    Field field; 
}; 

我使用CMP结构在以下几个方面:

  1. 使用参数化c'tor初始化成员。随着成员越来越多,论据的数量增加,而且看起来很丑。

  2. 使用cmp结构作为stl数据容器的一部分。

嵌套结构影响代码优化吗?如果是的话如何?

使用它们的更好方法是什么?

+0

由于您使用的是C++,为什么不能将结构体实现为类并使用继承? – Lundin

+1

@Lundin一个原因:它没有任何意义。 – millimoose

+0

@millimoose你怎么知道?结构有模糊的名称,可用于任何事情。这个问题没有说明他们实际使用的是什么。 – Lundin

回答

3

的关键是在这里:

从代码的可读性,这是一个更好的选择。

这是您应该选择的选项。

之后进行配置文件,并在必要时进行更改。尽管我非常怀疑它。按原样,对象应具有相同的布局。

+0

同意,内存布局应该是一样的。访问字段时优化如何? – Dexter

+0

@Dexter:由于布局是一样的没有。 –

+0

@Dexter这里最好说的是分析。 –

1

它不会影响性能。这些结构在内存中具有相同的布局,并且编译器完全知道所有成员的偏移量,因为您没有使用指针。 Theres在性能上没有区别

+0

对齐和填充如何?在使用64位值(我假设为64位o/s)的情况下,我并不确定结构的确切大小。 –

0

你可能想要考虑的一件事是填充和内存对齐。我不是100%确定64位int的存在是如何影响这个的,所以如果你提供了struct的大小,通过sizeof(cmp)它可以提供更多的信息。如果你有一个cmp数组,它会有所作为。

另外,如前所述,在我看来,可读性越高越好。