シングルトンオブジェクトを使用するときにキャッシュミスを防ぐ方法はありますか?ここに私の現在のシングルトンの実装です:C++でのシングルトンキャッシュミスの防止
SingletonObject.h
#pragma once
class SingletonObject
{
public:
static SingletonObject* SingletonObject();
static void SingletonObject();
private:
static SingletonObject* sSingletonObject;
SingletonObject();
~SingletonObject();
};
SingletonObject.cpp
は#include "SingletonObject.h"
SingletonObject* SingletonObject::sSingletonObject = NULL;
SingletonObject:: SingletonObject()
{
}
SingletonObject::~ SingletonObject()
{
}
SingletonObject* SingletonObject::GetSingleton()
{
if (sSingletonObject == NULL) // cache miss
{
sSingletonObject = new SingletonObject();
}
return sSingletonObject;
}
void SingletonObject::DestroySingleton()
{
delete sSingletonObject;
sSingletonObject = NULL;
}
は、キャッシュ・ミスを防止するこれを行うには良い方法はありますか?これはシングルトンを使用しない別の理由ですか?
更新:本当にキャッシュでスタック巻き戻しとGetSingleton()の呼び出しで、条件のチェックのために生成されたコードと同じくらいを行うには何もなかったが判明。シングルトンを明示的に作成および破棄して(要求を作成するのではなく)、静的インスタンスのアクセサを作成することで、オーバーヘッドの大部分を回避し、プロファイリングの大幅な高速化に注目しました。
SingletonObject.h
#pragma once
class SingletonObject {
public:
static void CreateSingleton();
static void DestroySingleton();
static inline SingletonObject* GetSingleton() { return sInstance; }
private:
static SingletonObject* sInstance;
SingletonObject();
}
SingletonObject.cpp
#include "SingletonObject.h"
void SingletonObject::CreateSingleton() {
if (sInstance == NULL)
sInstance = new SingletonObject();`
}
void SingletonObject::DestroySingleton() {
delete(sInstance);
sInstance = NULL;
}
キャッシュミスはどこにありますか? –
@Alenxandre C. 'GetSingleton()'メソッドの中にそのコメントがありますか? – Tom
@Tom:*キャッシュミス*には、質問とは無関係の共通の意味があります。ここでの問題は、質問が不明であることです。彼は避けたいのは何ですか?ポインタを最初の呼び出しでnullにする?それは破壊された後、それはヌルですか?そして、キャッシュミスとしての用語の混在は助けになりません。 –