Cで記述されたライブラリがあり、C ++とCで記述された2つのアプリケーションがあります。このライブラリは通信ライブラリであるため、API呼び出しの1つは次のようになります。
int source_send( source_t* source, const char* data );
Cアプリでは、コードは次のようになります。
source_t* source = source_create();
for( int i = 0; i < count; ++i )
source_send( source, "test" );
C ++アプリがこれを行うのに対して:
struct Source
{
Source()
{
_source = source_create();
}
bool send( const std::string& data )
{
source_send( _source, data.c_str() );
}
source_t* _source;
};
int main()
{
Source* source = new Source();
for( int i = 0; i < count; ++i )
source->send( "test" );
}
Intel Core i7では、C ++コードは1秒あたりほぼ正確に50%多くのメッセージを生成します。一方、Intel Core 2 Duoでは、1秒あたりほぼ正確に同じ量のメッセージを生成します。(コアi7には4つのコアがあり、それぞれに2つの処理スレッドがあります)
これを実現するためにハードウェアがどのような魔法を実行するのか興味があります。私はいくつかの理論を持っていますが、私は本当の答えが得られると思いました:)
編集:コメントからの追加情報
コンパイラはビジュアルC++であるため、これはWindowsボックスです(両方とも)
通信ライブラリの実装により、メッセージを送信するための新しいスレッドが作成されます。source_createは、このスレッドを作成するものです。