这两个设置在内存使用和性能方面是否相等?
我目前正在使用singeltons访问系统中的不同管理器。但是我注意到,singelton 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:这应该使它们不由堆内存创建吗?并且仍然允许向前拒绝。
////////////////////////////////////////////////////////////
// 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;