c++ - 在 C++ 结构创建中执行更快

标签 c++ structure

我正在研究 C++,我有一个结构最多 100 float它里面的变量,我要去initialize他们的值(value)0在没有参数的构造函数中,那么哪种方式更快?

类型 1:

struct info
{
  //no argument constructor
 info();

 float x1;
 float x2;
 .
 .
 .
 float x100;

}Info;   

info::info()
{
  float x1 = 0; 
  float x2 =0;
  .
  .
  .
  .
  .
  float x100 = 0; 

}
//creation 
Info* info1 = new Info();

类型 2:

typedef struct info
{
  float x1;
  float x2;
  .
  .
  .
  .
  float x100;
 }Info;

Info* infoIns = new Info;
memset(infoIns,0,sizeof(Info));

最佳答案

一百个名为 x1 .. x100 的变量只是调用一个数组(或者如果数字不同,可能使用 vector )

在这种情况下,std::fill(x, x+100, 0.0f) 可能会击败上述所有选择。

更好的解决方案可能是只初始化整个对象:

Info* infoIns = new Info();

Info infoIns = {};  // C++11

Info infoIns = Info();

只要是性能问题,唯一适用的答案就是“您可以衡量什么”。我可以坐在这里解释为什么根据我的经验,在我的机器(或我的机器)上,方法 A 比方法 B 或方法 C 更快。但是如果您使用不同的编译器,或者有不同的处理器,那可能不适用完全是因为您使用的编译器正在做一些不同的事情。

无论哪个“更快”,您都应该使用构造函数将值设置为零。如果你想使用 memset,那么一定要这样做,但要在构造函数内。这样一来,您就不会在代码中找到某个地方,您在尝试使用它之前忘记将其中一个结构设置为零。请记住,使用 memset 将结构/类设置为零是非常危险的。如果类或结构具有虚拟成员函数(或包含某些具有虚拟成员函数的对象),这很可能会覆盖描述虚拟函数的 VPTR。那是一件坏事。因此,如果您想使用 memset,请将其与 x1 一起使用,大小为 100 *sizeof(float)(但再次使用数组可能是更好的选择)。

关于c++ - 在 C++ 结构创建中执行更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485310/

相关文章:

c++ - 如何根据用户设置的初始变量设置一组常量值

c++ - 静态库缺少 `__imp_` 符号

c - 菜单式程序

c - 结构成员 - 地址重叠

C++复制没有指针的结构

c++ - 使用 const 成员分配类

c++ - 命名空间 + 重载 std::ostream << 运算符

c++ - 如何在 C++ 类中初始化可变大小数组?

c++ - 如何确定将哪种类型传递给模板定义的函数?

c - 通过 IF 语句选择结构