Одинаковы ли эти две установки с точки зрения использования памяти и производительности?
В настоящее время я использую одиночные кнопки для доступа к различным менеджерам в моей системе.Но я заметил, что синглтонские функции Get () занимают значительную часть исполнения, потому что они вызываются довольно часто.(Я думал, что компилятор оптимизирует это, но, видимо, нет)
Поэтому я начал искать способы изменить это.
Один из способов - просто поместить их в большой класс с общим состоянием.Но я все еще работаю и модифицирую этих менеджеров.Поэтому я хочу объявить их вперёд, чтобы избежать перекомпиляции (полная перекомпиляция занимает около 15 минут).
Но, тем не менее, я не «новый» помещаю их в другую позицию памяти.Не то же самое, что объявленные статические переменные без указателя.
Вопрос 1. Как эти два решения сравниваются друг с другом с точки зрения производительности?
Вопрос 2: И они быстрее, чем простой шаблон синглтона?
////////////////////////////////////////////////////////////
// Way 1: Shared State
////////////////////////////////////////////////////////////
// .h
class SharedState
{
// Just put all managers here
static ObjectManager1 manager1;
static ObjectManager2 manager2;
static ObjectManager3 manager3;
static ObjectManager4 manager4;
// Class things
}
или
////////////////////////////////////////////////////////////
// Way 2, Shared State (With pointers)
////////////////////////////////////////////////////////////
// .h
class SharedState
{
// Just put all managers here
static ObjectManager1* manager1;
static ObjectManager2* manager2;
static ObjectManager3* manager3;
static ObjectManager4* manager4;
}
// .cpp
ObjectManager1* SharedState::manager1 = new ObjectManager1();
ObjectManager2* SharedState::manager2 = new ObjectManager2();
РЕДАКТИРОВАТЬ: Способ 3: Это должно сделать их не будут создаваться кучей-объем памяти?И все же учтем вперёд decl.?
////////////////////////////////////////////////////////////
// Way 3
////////////////////////////////////////////////////////////
// .h
class SharedState
{
// Just put all managers here
static ObjectManager1* manager1;
static ObjectManager2* manager2;
static ObjectManager3* manager3;
static ObjectManager4* manager4;
}
// .cpp`
// Defines them static/global here
static ObjectManager1 g_Manager1;
static ObjectManager2 g_Manager2;
static ObjectManager3 g_Manager3;
// Set the class ptrs
static SharedState::ObjectManager1* manager1 = &g_Manager1;
static SharedState::ObjectManager2* manager2 = &g_Manager2;
static SharedState::ObjectManager3* manager3 = &g_Manager3;