2016-05-08 16 views
2

は、私は、このようなクラスがあるとします。私は、コンパイラがコードが書かれている方法とまったく同じようにアセンブリを書くだけであれば、すべての単一のMyClassインスタンスは、仮想関数のために追加されたデータサイズを持っていることに気が付いています.....仮想メソッドの最適化

これはオプティマイザ

class MyClass{ 
    int somedata; 
    public: 
    void DoSomething() { /*do something here*/} //Note absence of virtual 
}; 

これは標準に準拠した最適化であれば、どのコンパイラでもこれを行うことができますか?

+0

違いが分かるプログラムを作成できますか? –

+0

@PeteBeckerもし私が 'MyClass'の配列を持っていて、次に' void'ポインタを使ってメンバにアクセスしたのであれば...それはかなり極端です... – DarthRubik

+0

'void'ポインタを使ってメンバにアクセスすることはできません適合するプログラム。 –

答えて

4

あなたが引用した例のように、コードの予想される動作に影響を与えない限り、コンパイラとリンカが心から望むことを行うことができるのは、標準です。

最新のgccリリースノートでは、リンカと協力して、正確にこれを行うことを具体的に言及しています。

-1

C++ 11標準で導入されたfinalキーワードを使用する必要があります。

Class My class { 

Public: 
Void doSomething() final; 
} 
+0

私はこの質問に100%納得できるとは思っていませんが、もう少し説明すればそれが可能だろうと思っています。 – DavidW

関連する問題