所以我創建了一個類庫someBase {};這將由許多類別的下游用戶推導出來。有沒有辦法直接在C++中訪問RTTI來改進虛擬調用中的分支預測?
class someBase {
public:
virtual void foo()=0;
};
什麼我也有,是指針的向量someBase,我這樣做: -
vector <someBase*> children;
// downstream user code populates children with some objects over here
for (i=0; i<children.size(); i++)
children[i]->foo();
現在分析表明,虛擬呼叫的分支預測失誤,是一個(的幾個)我的代碼中的瓶頸。我想要做的是以某種方式訪問對象的RTTI,並使用它來根據類類型對子向量進行排序,以改進指令緩存局部性和分支預測。
任何關於如何做到這一點的建議/解決方案?
要記住的主要挑戰是: -
1)我真的不知道哪個或多少類是打算從someBase的。假設我可以在某個公共文件中有一個全局枚舉,讓下游用戶可以編輯它們以添加他們自己的類類型,然後對其進行排序(基本實現自己的RTTI)。但這是一個醜陋的解決方案。
2.)PiotrNycz在他的回答中建議使用type_info。但是,只有!=和==是爲此定義的。關於如何在type_info上導出嚴格的弱排序的任何想法?
3.)我真的希望改善分支預測和指令緩存局部性,所以如果有替代解決方案,那也是值得歡迎的。
@EdS。我的錯。修正了這個問題。 – owagh