结构与类的性能 我想知道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++中,
#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)。我的原始代码就是这样做的,但我无意中删除了它,所以我只是写了一些快速而肮脏的代码来发布:)