考慮下面的代碼:空基類建設開銷?
#include <iostream>
#include <type_traits>
class Base
{
public: static int f() {return 42;}
};
class Derived : public Base
{
protected: int x;
};
class NotDerived
{
protected: int x;
};
int main()
{
std::cout<<sizeof(Base)<<std::endl;
std::cout<<sizeof(Derived)<<std::endl;
std::cout<<sizeof(NotDerived)<<std::endl;
return 0;
}
隨着克++ 4.7 -O3,它打印:
1
4
4
,如果我明白很好,這意味着空基類優化被啓用。
但我的問題涉及到運行時開銷:有沒有什麼開銷創建(和銷燬)相比NotDerived
對象Derived
對象因事實Derived
要建設/破壞相應Base
對象?
我會這樣想,但我也不認爲你應該擔心它。你應該使用適合你工作的工具。在性能分析階段處理任何優化。 – RonaldBarzell
這是我的代碼的關鍵方面。使用空的基類會對設計有很大的幫助,但是由於我在高性能計算領域工作,並且在執行過程中會創建數十億個此類對象,所以我應該關心它... – Vincent
您應該關心,但對我而言,問題是你是否應該早點關心這件事?既然你有數字,你有沒有做過一些預測,看看你會在哪裏?看起來,如果從一開始就擔心這麼多問題,最好的辦法是爲最大可接受命中率提供硬編碼,然後將它們與編譯器進行比較,並記住不同的編譯器會產生不同的結果。 .. – RonaldBarzell