C++ 嵌套结构

C++ 嵌套结构,c++,C++,我需要从优化的角度来看待以下问题: 我有一个带有一些字段的结构: 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 {

我需要从优化的角度来看待以下问题:

我有一个带有一些字段的结构:

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结构:

  • 使用参数化的c'tor初始化成员。随着成员越来越多,争论的数量也越来越多,而且争论看起来也越来越难看

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

  • 嵌套结构是否影响代码的优化?如果是,怎么做

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

    关键在于:

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

    这是你应该选择的

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

    关键在于:

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

    这是你应该选择的


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

    这不会影响性能。这些结构在内存中具有相同的布局,并且编译器确切地知道所有成员的偏移量,因为您没有使用指针。这两者在性能方面没有区别

    它不会影响性能。这些结构在内存中具有相同的布局,并且编译器确切地知道所有成员的偏移量,因为您没有使用指针。就性能而言,这两者之间没有区别。您可能需要考虑的一件事是填充和内存对齐。我不能100%确定64位int的存在会如何影响这一点,因此如果您通过sizeof(cmp)提供结构的大小,它将提供更多的信息。如果你有一个cmp数组,它将产生不同


    另外,如前所述,在我看来,更具可读性的选项更好。

    您可能需要考虑的一件事是填充和内存对齐。我不能100%确定64位int的存在会如何影响这一点,因此如果您通过sizeof(cmp)提供结构的大小,它将提供更多的信息。如果你有一个cmp数组,它将产生不同


    另外,正如前面所说的,在我看来,可读性更好。

    同意,内存布局应该是相同的。访问字段时的优化如何?@Dexter:因为布局是相同的无。同意,内存布局应该是相同的。当访问字段时,优化是什么?@ DEXTER:因为布局是相同的。既然你使用C++,为什么不能把结构作为类来实现并使用继承?@ Lundin一个原因:它毫无意义。结构具有模糊名称,可以用于任何用途。从这个问题上说不出它们实际上是用来做什么的。@Lundin尽管如此,我在这里看不到is-a关系,更像是构图。我认为OP没有包含任何行为这一事实是不存在任何行为的弱证据——这意味着没有太多理由使用继承和多态性。如果类是不透明的,并且主要是由它们的行为定义的(也就是说,当您实际上在进行数据隐藏时),我也会使用类的结构来传递相关的值。@millimoose您看不到一个,因为在给定的变量名中选择不当是不可能分辨的。因此,我的问题是,OP. C++既然使用C++,为什么不能将结构实现为类并使用继承?@ Lundin一个原因:它毫无意义。结构具有模糊名称,可以用于任何用途。从这个问题上说不出它们实际上是用来做什么的。@Lundin尽管如此,我在这里看不到is-a关系,更像是构图。我认为OP没有包含任何行为这一事实是不存在任何行为的弱证据——这意味着没有太多理由使用继承和多态性。如果类是不透明的,并且主要是由它们的行为定义的(也就是说,当您实际上在进行数据隐藏时),我也会使用类的结构来传递相关的值。@millimoose您看不到一个,因为在给定的变量名中选择不当是不可能分辨的。因此,我的问题是向OP澄清。对齐和填充如何?在使用64位值(我假设是64位o/s)的情况下,我不能100%确定结构的确切大小。对齐和填充呢?在使用64位值(我假设是64位o/s)的情况下,我不能100%确定结构的确切大小。