Какой из этих двух способов хранения нескольких статических менеджеров лучше всего подходит для производительности? - PullRequest
1 голос
/ 26 марта 2019

Одинаковы ли эти две установки с точки зрения использования памяти и производительности?

В настоящее время я использую одиночные кнопки для доступа к различным менеджерам в моей системе.Но я заметил, что синглтонские функции 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;

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