Интересно, есть ли сравнение производительности классов и структур стиля C в С++ с опцией g++ -O3. Есть ли какой-либо бенчмарк или сравнение по этому поводу. Я всегда считал классы С++ более тяжелыми и, возможно, медленнее, чем структуры (время компиляции для меня не очень важно, время выполнения более важно). Я собираюсь реализовать B-дерево, должен ли я реализовывать его с классами или с помощью структур для производительности.
Выступления структур против классов
Ответ 1
На уровне исполнения нет разницы между структурами и классами на С++.
Таким образом, разница в производительности не влияет на использование struct A
или class A
в вашем коде.
Другое дело, это использование некоторых функций - например, конструкторов, деструкторов и виртуальных функций, - может иметь некоторые штрафы за производительность (но если вы их используете, они, вероятно, все равно понадобятся). Но вы можете с равным успехом использовать их как внутри вашего класса, так и структуры.
В этот документ вы можете прочитать о других связанных с производительностью тонкостях С++.
Ответ 2
В С++ struct
является синтаксическим сахаром для классов, члены которых по умолчанию общедоступны.
Ответ 3
Мое честное мнение... не беспокойтесь о производительности, пока оно на самом деле не показало себя проблемой, а затем профилирует ваш код. Преждевременная оптимизация - это корень всего зла. Но, как говорили другие, нет разницы между структурой и классом в С++ во время выполнения.
Ответ 4
Сосредоточьтесь на создании эффективной структуры данных и эффективной логики для управления структурой данных. Классы С++ не являются по своей сути медленнее, чем структуры C-стиля, поэтому не позволяйте этому ограничивать ваш дизайн.
Ответ 5
AFAIK, с точки зрения производительности, они эквивалентны в С++.
Их отличие состоит в том, что synctatic sugar, например, элементы структуры, являются общедоступными по умолчанию, например.
my2c
Ответ 6
Просто сделайте эксперимент, люди!
Вот код для эксперимента, который я разработал:
#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;
}
На моем компьютере структура заняла 1286 тактов, а класс занял 1450 часов. Чтобы ответить на ваш вопрос, структура немного быстрее. Однако это не имеет значения, потому что компьютеры в эти дни настолько быстры.