/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Velocidad de ejecucion entre C++ y C

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 23/10/2007 8:56 am
Título: Velocidad de ejecucion entre C++ y C

Hola a todos

Me acaba de entrar una duda con respecto a la velocidad de ejecucion o el rendimiento del proceso de ejecucion en hacer un mismo programa ESTRUCTURADO con C y con C++.

Resulta que siempre se decia que si vas a hacer un programa estructurado utilizando C o C++, convendria hacerlo en C porque el rendimiento y la velocidad de ejecucion (aunque sea casi imperceptible para el ser humano) se nota en la computadora a nivel de rendimiento. Por lo tanto aconsejaban: "Si quieres hacer un programa estructurado hazlo en C y no en C++ porque en C se ejecutara mas rapido que si lo haces en C++. Utiliza C++ para la programacion orientada a objetos, independientemente de que C++ sea multiparadigma."

Pero ahora en una página (un foro) que encontré por ahi dice que eso no es cierto: que la velocidad de ejecucion de un programa estructurado hecho en C++ es igual que en C.

Yo humildemente sigo pensando que un programa estructurado hecho en C correra mas rapido que el mismo programa estructurado hecho en C++ puro. Utilizaria C++ para hacer programas orientado a objetos puro, para aprender la POO; o en proyectos de gran envergadura puesto que ahi la POO tiene sus frutos.

Cuando digo C++ puro me refiero, por ejemplo, utilizar las funciones propias de C++ como ser cout, cin, delete.
En cambio en C seria utilizar las funciones scanf, printf, free que son propias de C.


Quisiera que alguien bien entendido de C y C++ de su opinion al respecto y me diga si es cierto o no que C es mas veloz que C++ si se hace el mismo progama estructurado.

Saludos
_________________
esta es mi firma.
Volver arriba
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 23/10/2007 12:49 pm
Título:

Volviendo con este tema:

Me olvide de fundamentar que C deberia ser mas rapido que C++ porque el primero es de mas bajo nivel que el segundo. Por ejemplo, un scanf en C es mas 'crudo' que un cout en C++, es decir, el scanf es de mas bajo nivel que el cout de C++. Por lo tanto al ser una instruccion (scanf) de mas bajo nivel que otra (cou), entonces la primera se procesara mas rapido.
No se si me entienden. Que opinan ustedes?.
_________________
esta es mi firma.
Volver arriba
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 23/10/2007 12:53 pm
Título:

Haber si alguien me saca de esta encrucijada...
_________________
esta es mi firma.
Volver arriba
jonan_1988



Registrado: 12 Abr 2005
Mensajes: 49

MensajePublicado: 23/10/2007 1:54 pm
Título:

Vamos a ver, aquí hay dos factores que pueden dar razón a uno o a otro.

Si nos ponemos estrictos y suponemos que tenemos un programa hecho en C y ese mismo hecho en C++ y los dos tienen el algoritmo perfecto. C es más rápido y el ejecutable ocupa menos y esto se nota en programas grandes.

Ahora bien, hay otro problema. En C++ tienes una librería estándar que te hace muchísimas cosas que en C tienes que hacer a mano: listas, colas, strings... Todas estas cosas están miradas y revisadas a conciencia y podríamos decir que es el algoritmo perfecto para diseñarlas. Si un programador inexperto las implementa en C es muy probable que su algoritmo no sea tan bueno y eso haga que el mismo programa sea más rápido en C++ que en C.
_________________
Diario de un pre-informático
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 23/10/2007 2:59 pm
Título:

La eficiencia final del ejecutable depende en gran medida del compilador y de las librerias c/c++ runtime del sistema.

Entre un:
Código:
std::cin >> var;

y un:
Código:
scanf("%d" ,&var);

Me atreveria a decir que es mas eficiente el primero por que se comprueba el tipo en la fase de diseño (template) mientras que scanf delega esto ultimo en el especificador de formato, ademas de tener que parsear dicho especificador en tiempo de ejecución.
Esto en la vida real es inviable por que nadie tiene la capacidad de introducir millones de datos por unidad de tiempo sobre la entrada estandar :-P

Y como comentaba jonan_1988, la STL al dia de hoy esta muy optimizada, para conseguir el mismo perfomance o mejorarlo tendriamos que optimizar tambien muchisimo las implementaciones propias equivalentes, esto al menos desde un punto de vista generico. Con C, conceptualmente, podemos afrontar los problemas de forma mas especializada.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.


Ultima edición por cheroky el 23/10/2007 3:51 pm; editado 1 vez
Volver arriba
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 23/10/2007 3:12 pm
Título:

Entonces,cual es la conclusion final y resumida de este tema?.
Deberemos programar nomas en C++ (y dejar de lado al C) ya que su algoritmo es mas eficiente, sus funciones tambien lo son, y nos detecta mejor los errores?.
_________________
esta es mi firma.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 23/10/2007 4:25 pm
Título:

Nadie dice que C++ sea más eficiente, ni mucho menos, en ciertos campos como en la programación de sistemas o situaciones criticas C esta más indicado. Si necesitamos implementar una cola con campos de bits de un nibble siempre será mas optima una especialización en C que utilizar un contenedor como como la plantilla bitset de C++.

Ahora bien, retomando la pregunta inicial sobre la comparación de eficiencia de ambos lenguajes en forma estructurada es prácticamente trivial por que los mecanismos del lenguaje como punteros, llamadas a funciones y demás son casi un calco en ambos y no se limita a comparar algo como cout que es una instancia de un objeto, y scanf una función, lo primero implica una llamada a un constructor y destructor y aun así este (como dije anteriormente) podría ser mas "eficiente".

Mi consejo es que programes en ambos (si puedes) y usa cada uno como y cuando mas gustes, ambos lenguajes (en mi caso) me apasionan, y no tomes demasiado en serio lo que te digan, la programación tiene más de arte que de ciencia.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 23/10/2007 5:45 pm
Título:

Gracias por las respuestas. Saludos.
_________________
esta es mi firma.
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com