2010-08-15 19 views
5

Supongamos que he escrito un programa en C++ sin utilizar RTTI y polimorfismo en tiempo de ejecución (sin función virtual, sin herencia virtual) y las clases no tienen miembros privados/protegidos, también los archivos de encabezado específicos de C++ no se utilizan (es decir Se usan archivos de encabezado C: cstring, cstdio, ... en lugar de string, iostream, ...).¿Es un programa C++ realmente más lento que un programa C similar?

Luego quiero escribir un programa similar en C, en el cual el primer tipo de argumento de las funciones se corresponde con el relacionado struct.

Por ejemplo:

//C++ code 

struct Custom 
{ 
    int a; 
    Custom() { } 
    void change() { } 
    ~Custom() { } 
}; 

int main() 
{ 
    Custom m; //init m 
    m.change(); 
    //destroy m 
} 

/*C code*/ 

struct Custom 
{ 
    int a; 
}; 
void custom_init(Custom* like_this) { } 
void custom_change(Custom* like_this) { } 
void custom_destroy(Custom* like_this) { } 

int main() 
{ 
    Custom m; 
    custom_init(&m); 
    custom_change(&m); 
    custom_destroy(&m); 
} 

es el programa de C++ más lento que el programa similar C (general)? En caso afirmativo, ¿por qué los programas C son más rápidos? Lo sé, C++ utiliza el patrón de diseño RAII para la gestión de la memoria, ¿es la razón de la lentitud?

Escuché que algunas personas dijeron que los programas C son más rápidos ... ¿por qué?

Editar: ¿Por qué esta pregunta está cerrada? Quería saber si C++ hace algo adicional que no necesitamos, y cómo afecta el rendimiento (lo hace más lento, más rápido o nada?).

+1

La respuesta dependería del compilador/plataforma/hardware. Simplemente compila ambos programas, punto de referencia. Además, en algunos casos, las posibilidades de causar daños accidentalmente pueden no valer la pena. – SigTerm

+6

No cierre. No te ofendas cada vez que se compara algo con C. Me gustaría saber si hay situaciones en las que este sea el caso. –

+0

. Es gracioso que hayas escuchado que C es más rápido que C++, porque ambos son mucho más rápidos que cualquier otra cosa, entre ellos están los guisantes y los frijoles. –

Respuesta

6

C++ no usa RAII. Usted CAN usa RAII en su programa C++.
Siempre y cuando esté haciendo exactamente lo mismo en C++ y en C, , ambos programas deben ser exactamente igual de rápidos.
Escribir programas rápidos en C o C++ no es una cuestión de lenguaje de programación sino de qué tipo de característica utilizas.

+1

Si no usamos punteros, como la variable 'm' en el ejemplo anterior, C++ usa RAII para asignar y liberar su memoria (cuando se produce un error en el constructor, se libera la memoria asignada) (y si hay un error) se produce después de la inicialización de clase, se llamará automáticamente al destructor). –

+1

@ PC2st Simplemente porque funciona LIKE RAII no significa que es RAII. – SoapBox

+1

@ PC2st Cuando dice que ocurre un error, ¿quiere decir si se lanza una excepción? Significa que está utilizando una función adicional que no habría utilizado en C. Si desea que la comparación sea significativa, no debe usar la excepción, ni implementar el manejo de excepciones en C. – log0

2

No, es casi seguro que es falso. RAII por sí mismo no hará que el programa sea más lento. Ambos compiladores C y C++ probablemente generarían código casi idéntico para estos ejemplos.

4

Nunca lo sabrá hasta que lo intente. Si C++ utiliza algo que C no lo hace (como constructores, destructores e incluso métodos no virtuales), puede ser más lento.

Pero la diferencia probablemente será tan pequeña como para ser imperceptible.

Las primeras implementaciones de C++ pueden haber sido más lentas que C, pero esa es la naturaleza de cualquier software. Mejora con el tiempo

¡Mida, no adivine! Perfila tu código específico para ver cuál es más rápido. Pero incluso si el código C es más rápido, el precio de perder toda esa funcionalidad adicional puede ser demasiado. La velocidad de ejecución es solo una velocidad, y rara vez la más importante. Mi opinión de qué velocidad es la más importante es la velocidad de desarrollo.

+0

Gracias por su respuesta, pero quiero saber si C++ hace algo adicional que no necesitamos, y cómo afecta el rendimiento (¿lo hace más lento o nada?). por ejemplo, RAII hace lo que hace que C++ sea más lento? (o puede que no) y otras cosas que puede hacer C++ para hacerlo más lento que C (o no). –

+0

@ PC2st, si quieres saber eso, entonces prueba eso. Dependerá de la implementación. Podría escribir fácilmente un compilador de C que genere código más lento que g ++ (eso es muy posible ya que, en función de la salida del ensamblador, los chicos de g ++ tienen mucho más conocimiento sobre la optimización que yo). Crikey, podría escribir un compilador de C cuyo código corriera más lento que GWBASIC :-) A menos que comiences a comparar implementaciones específicas (para que los datos reales puedan ser recogidos en lugar de las anécdotas de las personas), la pregunta parece carecer de sentido. – paxdiablo

Cuestiones relacionadas