Существуют ли какие-либо потери производительности при использовании вложенных структур? - PullRequest
3 голосов
/ 17 сентября 2010

Существуют ли какие-либо ограничения производительности, когда я использую несколько вложенных структур / классов (вроде как использование массивов кучи измерений muti) или это просто организационная особенность языка, упрощающая отслеживание данных, а компилятор нена самом деле видите разницу?

Спасибо

Ответы [ 4 ]

3 голосов
/ 17 сентября 2010

Не совсем.Классы / структуры просто определяют смещения в памяти, поэтому, если у вас есть класс внутри класса внутри класса, компилятор просто складывает смещения.

Производительность вступает в игру, когда у вас есть указатели (каждая разыменование указателячтение памяти и потенциальная ошибка кэша L2) или виртуальные функции (очень плохо, особенно на старых процессорах).

РЕДАКТИРОВАТЬ: Однако я должен отметить одну вещь - если вы разрабатываете приложение, где производительность не является абсолютно важнойсосредоточиться на хорошем дизайне класса, а не производительности.Хотя такие вещи, как пропадание кеша второго уровня, имеют большое значение, когда вы пишете что-то, что должно работать со скоростью 60 кадров в секунду, это не имеет большого значения для обычного настольного приложения.

1 голос
/ 17 сентября 2010

В основном нет, как уже упоминали другие. Однако есть небольшое исключение: размещение структур внутри структур может привести к небольшому штрафу за использование памяти из-за проблем с выравниванием по сравнению с теми же примитивами, которые помещаются непосредственно в одну структуру. Теоретически это может привести к потере кеша, что снижает производительность. Например:

#include <iostream>
using namespace std;  // So sue me

struct A {
    double d;
    int i;
};

struct B {
    int j;
    int k;
    int l;
};

struct AB {
    A a;
    B b;
};

struct C {
    double d;
    int i;
    int j;
    int k;
    int l;
};

int main() {
    cout << sizeof(AB) << endl;  // 32
    cout << sizeof(C) << endl;   // 24
}
1 голос
/ 17 сентября 2010

Не должно быть никаких потерь производительности или памяти.Они просто синтаксический сахар, облегчающий программисту задачу.

0 голосов
/ 17 сентября 2010

Краткий ответ: Нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...