Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构与类的性能 我想知道C++与G++O3选项是否存在类和C样式结构的性能比较。这方面有什么基准或比较吗。我一直认为C++类比结构更重,也可能更慢(编译时间对我来说不是很重要,运行时间更重要)。我要实现一个B-树,我应该用类或结构来实现它。在运行时级别上,C++中的结构和类之间没有区别。 因此,无论您在代码中使用struct A还是class A,都不会对性能产生任何影响_C++_Performance_Class_Struct - Fatal编程技术网

结构与类的性能 我想知道C++与G++O3选项是否存在类和C样式结构的性能比较。这方面有什么基准或比较吗。我一直认为C++类比结构更重,也可能更慢(编译时间对我来说不是很重要,运行时间更重要)。我要实现一个B-树,我应该用类或结构来实现它。在运行时级别上,C++中的结构和类之间没有区别。 因此,无论您在代码中使用struct A还是class A,都不会对性能产生任何影响

结构与类的性能 我想知道C++与G++O3选项是否存在类和C样式结构的性能比较。这方面有什么基准或比较吗。我一直认为C++类比结构更重,也可能更慢(编译时间对我来说不是很重要,运行时间更重要)。我要实现一个B-树,我应该用类或结构来实现它。在运行时级别上,C++中的结构和类之间没有区别。 因此,无论您在代码中使用struct A还是class A,都不会对性能产生任何影响,c++,performance,class,struct,C++,Performance,Class,Struct,另一件事是,使用一些特性——比如构造函数、析构函数和虚拟函数——可能会有一些性能损失(但如果您使用它们,您可能仍然需要它们)。但是您可以在类或结构中同样成功地使用它们 你可以阅读C++的其他性能相关的细微之处。 AFAIK,从性能的角度来看,它们在C++中是等价的。 它们的不同之处在于,例如,类似synctatic的结构成员在默认情况下是公共的 在C++中, > Stult是默认情况下的成员为公共类的语法糖。 < P>着重于创建高效的数据结构和高效的逻辑来操纵数据结构。C++类的本质并不是C风格

另一件事是,使用一些特性——比如构造函数、析构函数和虚拟函数——可能会有一些性能损失(但如果您使用它们,您可能仍然需要它们)。但是您可以在类或结构中同样成功地使用它们


你可以阅读C++的其他性能相关的细微之处。

AFAIK,从性能的角度来看,它们在C++中是等价的。 它们的不同之处在于,例如,类似synctatic的结构成员在默认情况下是公共的


在C++中,< P> > Stult是默认情况下的成员为公共类的语法糖。

< P>着重于创建高效的数据结构和高效的逻辑来操纵数据结构。C++类的本质并不是C风格的结构,所以不要让这限制了你的设计。

< P>我的诚实意见……不要担心性能,直到它显示出自己的问题,然后对你的代码进行剖析。过早优化是万恶之源。但是,正如其他人所说的,在运行时C++中的结构和类之间没有区别。

< P>只是做一个实验,人们!p> 以下是我设计的实验代码:

#include <iostream>
#include <string>
#include <ctime>
using namespace std;
class foo {
  public:
    void foobar(int k) {
      for (k; k > 0; k--) {
        cout << k << endl;
      }
    }
    void initialize() {
      accessor = "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf";
    }
    string accessor;
};
struct bar {
  public:
    void foobar(int k) {
      for (k; k > 0; k--) {
        cout << k << endl;
      }
    }
    void initialize() {
      accessor = "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf";
    }
    string accessor;
};

int main() {
  clock_t timer1 = clock();
  for (int j = 0; j < 200; j++) {
    foo f;
    f.initialize();
    f.foobar(7);
    cout << f.accessor << endl;
  }
  clock_t classstuff = clock();
  clock_t timer2 = clock();
  for (int j = 0; j < 200; j++) {
    bar b;
    b.initialize();
    b.foobar(7);
    cout << b.accessor << endl;
  }
  clock_t structstuff = clock();
  cout << "struct took " << structstuff-timer2 << endl;
  cout << "class took " << classstuff-timer1 << endl;
  return 0;
}
#包括
#包括
#包括
使用名称空间std;
福班{
公众:
void foobar(int k){
对于(k;k>0;k--){

实际上,结构在时间和内存上都比类更有效(例如结构数组和对象数组)

‎‏这是一个巨大的挑战 效率差异 一些案例。而 物体的上方 可能看起来不太好 很多,考虑一个数组 对对象进行排序并进行比较 指向一个结构数组。 假设数据 结构包含16个 字节的数据,数组 长度为1000000,并且 这是一个32位系统。 对于对象数组 总空间使用量为: 8字节数组开销 (4字节指针大小×) ((8字节开销)+ =28MB 对于结构数组, 结果是 截然不同: 8字节数组开销 (16字节数据×1,00 =16MB 在64位进程中 对象数组接管 40 MB,而结构 阵列仍然只需要16个 MB


有关详细信息,请参阅。

您知道关于其内存消耗的任何文档或基准测试:结构与类。再说一次:在运行时级别,结构与类之间没有区别——性能和内存消耗。您可以将它们视为同一事物的不同关键字,只是对成员和数据的默认访问不同错误继承模式(您不能在模板参数列表中使用'struct',但您的问题不是关于它,对吗?)C中的结构是否比C++中的结构要快?或者用另一种方式看,<代码>结构> <代码>是向后兼容C的语法,而类< /C> >对于默认的成员是私有的类,是更为面向对象的语法糖……我想给出这个答案+1.000 0.000(仅稍微地夸大);如果可以的话,因为导致原始问题的误解非常普遍。所以每个人都跟在我后面重复:“
struct
class
是等价的(默认访问除外)”,我不吃糖。我可以吃无糖的结构吗?我想知道如果“struct”的话,语言的演变会受到什么影响语法仅限于POD,如果适用于POD的保证仅适用于声明为“struct”的类型添加一个新的关键字,基本上意味着与“代码>结构>代码/代码>和<代码>私有< /代码>的组合是相当浪费的。你最喜欢哪个双胞胎?实际上我从未使用C++结构的高级特性,我一直把它们当作公共数据的数据容器,就像C结构一样。复杂的功能,如继承、多态性等,我更喜欢使用类。因此,这不是一种爱与恨的关系。他清楚地询问了类和结构之间的差异,而不是有关软件设计的提示。实际上,这个测试可能不是最优的,因为第一个测试将比第二个测试花费更长的时间,因为e处理器将必须准备执行它。在采取措施之前,最好运行两个循环数次,避免使用IO,因为它会严重影响测量精度。我对您的测试做了一些更改,结果表明两者的性能相同,有时一个比另一个稍微快一点,即:(类:1116530523507)(结构:1087498541543)。我的原始代码就是这样做的,但我无意中删除了它,所以我只是写了一些快速而肮脏的代码来发布:)