У меня есть библиотека, написанная на C, и у меня есть 2 приложения, написанные на C ++ и C. Эта библиотека является коммуникационной библиотекой, поэтому один из вызовов API выглядит следующим образом:
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 ++ производит почти ровно на 50% больше сообщений в секунду.
В то время как на Intel Core 2 Duo он выдает почти одинаковое количество сообщений в секунду. (Ядро i7 имеет 4 ядра с 2 процессорными потоками в каждом)
Мне любопытно, какое волшебство аппаратное обеспечение выполняет, чтобы осуществить это. У меня есть некоторые теории, но я думал, что получу реальный ответ:)
Редактировать: Дополнительная информация из комментариев
Компилятор - это визуальный C ++, так что это окно Windows (оба)
Реализация коммуникационной библиотеки создает новый поток для отправки сообщений. Source_create - это то, что создает этот поток.