gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:31:58 24 4
gpt4 key购买 nike

我正在研究 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com