Я хотел бы знать это, если у нас есть следующий класс:
class MyClass
{
public:
MyClass(...)
type nonstatic_func1(...);
type nonstatic_func2(...);
...
type nonstatic_func10(...);
private:
type var1;
type var2;
...
type var10;
};
Будет ли каждый экземпляр MyClass
иметь свой собственный набор из десяти функций (т. е. будет ли создаваться «версия» каждой из десяти функций)? В какой степени, скажем, наличие 20 функций в определении класса влияет на производительность, в отличие от, скажем, двух функций (не статических), особенно в отношении создания экземпляров, но также и при работе с этими экземплярами? Насколько количество переменных повлияет на производительность? (см. следующий абзац, vector
часть)
Причина, по которой я спрашиваю, заключается в том, что я пишу программу, которая создает множество экземпляров класса (для иллюстрации у меня довольно большой вектор, т.е. vector<MyClass> vec
например), и программа работает медленнее, чем я ожидал.
В двух словах, я хотел бы знать, сколько накладных расходов приходится на создание экземпляра класса, который имеет много нестатических функций / переменных, и работу с ним.
РЕДАКТИРОВАТЬ
Одна из вещей, которые я делаю с моим большим вектором экземпляров классов, это сортировка … это главное, что я подозреваю, это снижение производительности, так как есть много движущихся (и копирующих, явно и неявно) элементов (экземпляров) вокруг и между векторы. Очевидно, что если объем данных, которые необходимо переместить и скопировать, достаточно велик, это может привести к снижению производительности.
Будет ли каждый экземпляр MyClass иметь свой собственный набор из десяти функций
Нет.
В какой степени, скажем, наличие 20 функций в определении класса влияет на производительность, в отличие от, скажем, двух функций (не статических), особенно в отношении создания экземпляров, но также и при работе с этими экземплярами?
Поэтому нет.
Насколько количество переменных повлияет на производительность?
Основное влияние наличия большого количества переменных-членов состоит в том, что каждый экземпляр занимает много места в памяти. Следствием большого размера является то, что он будет тратить много времени на копирование. Менее очевидные временные издержки были бы в кэшировании процессора.
Но эти накладные расходы не могут быть причинами вашей проблемы.
Одна из вещей, которые я делаю с моим большим вектором экземпляров классов, это сортировка … это главное, что я подозреваю, это снижение производительности
Не подозревай. Мера. Чтобы отследить, куда идет производительность, выясните, где находится узкое место.