- 735 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:10:33.50 ID:7dJ8iAqk0.net]
- (L)は必ず直接呼び出しになる。アセンブラなら push, push, push, call
(M)はソース上を精査すれば同型呼び出ししかないことが分かるので 技術的には(L)と同程度まで最適化可能ではあるが、一般的には無理だと思う。 2段階呼び出し時は push, push, push, call, mov, jmp (N)は異なる形の呼び出しが与えられているので、 技術的に(L)と同じコスト(アセンブラ4命令程度)の直接呼び出しは不可能。 無理にcmpとかやるより普通に2段階呼び出しの方がいいと思う。 だからVCもそうしていると見ている。 それで、std::bindについては詳しい奴が以下見れば実装の見当が付くはずだが、 俺はC++用語に詳しくないので分からん。 ja.cppreference.com/w/cpp/utility/functional/bind 俺が実装するなら、ありがちなのをテンプレートで実装するが、 その場合はポインタサイズはsizeof(int)*2になる。 (メンバ関数へのポインタと、bind済みの値をstructで持つ=内部的な匿名クラスにするから) VCがなぜ4に出来るのかは分からん、というか計測間違いじゃないかと思う。 (バインド済みの値の分を入れてない)
|

|