Tengo una biblioteca escrita en C y tengo 2 aplicaciones escritas en C++ y C. Esta biblioteca es una biblioteca de comunicación, entonces de las llamadas a la API se parece a esto:¿Por qué mi aplicación C++ es más rápida que mi aplicación C (usando la misma biblioteca) en un Core i7
int source_send(source_t* source, const char* data);
En la aplicación del código C hace algo como esto:
source_t* source = source_create();
for(int i = 0; i < count; ++i)
source_send(source, "test");
Donde como la aplicación C++ hace esto:
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");
}
En un Intel Core i7, el código C++ produce casi exactamente un 50% más de mensajes por segundo .. Mientras que en un Intel Core 2 Duo produce casi exactamente la misma cantidad de mensajes por segundo. (El núcleo i7 tiene 4 núcleos con 2 hilos de procesamiento cada uno)
Tengo curiosidad por saber qué tipo de magia realiza el hardware para lograrlo. Tengo algunas teorías, pero pensé que iba a conseguir una verdadera respuesta :)
Editar: Información adicional de los comentarios
Compiler es visual C++, así que esto es una caja de ventanas (dos de ellos)
La implementación de la biblioteca de comunicación crea un nuevo hilo para enviar mensajes. El source_create es lo que crea este hilo.
¿Compilador? Configuración del compilador? Tiempo de ejecución? Comparar el código de objeto emitido? –
¿Está compilando la biblioteca C también? ¿O ya está compilado para ti? ¿Source_send() se define en línea? –
Tengo dificultades para colocar esto en el compilador. Estoy usando Visual Studio, por lo que debe generar código que funcione en todas las máquinas Windows, independientemente de los núcleos. Ahora, si estaba compilando con gcc -mtune = native podríamos tener algo, pero no es el caso – Charles