velocidades de lenguaje c vs objective c

Me he estado preguntando: ¿cuánto más rápido corre c que el objective c? De lo que entiendo c funciona más rápido. Recientemente implementé una function de matemáticas en mi aplicación (escrita en el estándar c) con la esperanza de que boostía la velocidad, pero ¿realmente tiene tanto efecto?

saludos GC

Como otros han dicho, el algorithm es más importante que el lenguaje. Dicho esto, no hay duda de que a veces hay que optimizar el código sensible a la velocidad. Cada llamada al método Objective-C requiere más instrucciones que una llamada de function C simple. La asignación de objects en loops apretados del juego generalmente es una mala idea y las llamadas tanto iOS como Mac OS X tienden a asignar muchos objects.

En los viejos times, incluso una llamada al método C ++ sería demasiado lenta en un ciclo cerrado y las llamadas al método C ++ son generalmente más rápidas que las de Objective-C. En las máquinas modernas, no ve este tipo de problemas, pero aún existen. Los filters Core Audio son un buen ejemplo de código que debe escribirse en plain C en lugar de Objective-C debido a problemas de velocidad.

Lo que recomendaría es escribir su código usando Objective-C y luego ejecutarlo para ver si es demasiado lento. Si es así, ejecute Instrumentos y vea dónde está gastando la mayor parte de su time. A continuación, optimice ese código con lenguaje sencillo C, C ++ o incluso ensamblador (está bien, es broma sobre el lenguaje ensamblador a less que realmente esté presionando el sobre).

Si encuentra que el método de sobrecarga de llamadas dentro de los loops lo está desacelerando, puede optimizarlo mediante el uso de llamadas de function C simples, rutinas en línea, desenrollando el ciclo o utilizando pointers IMP para evitar la sobrecarga de búsqueda de methods.

Si descubre que está copyndo demasiados datos, puede optimizarlos al compartir búferes en lugar de copyrlos o tal vez utilizando [NSData dataWithBytesNoCopy] en lugar de [NSData dataWithBytes], etc.

A veces puede optimizar sus charts para que dibujen más rápido: elimine las transparencias donde no se necesiten. No use sombras o desenfoques CALayer. Todas las Mac nuevas y muchos dispositivos iOS tienen dos o más núcleos de CPU, por lo que tal vez pueda download algún procesamiento al segundo núcleo utilizando subprocesss. La list sigue y sigue.

Entonces, escriba su aplicación primero usando Objective-C usando algorithms razonables y luego optimice más tarde cuando vea dónde están los problemas. No hagas nada estúpido, como hacer n ^ {2} loops a través de una matriz grande en un ciclo cerrado, y probablemente estarás bien para el 90% de tu código.

Cualquier idioma comstackdo en código nativo produce aproximadamente las mismas instrucciones para el procesador en una tarea determinada. El lenguaje en sí mismo no implica ganancias de velocidad. Es una idea errónea común que el ensamblaje es más rápido que C; C es más rápido que C ++ / Objective-C / ¿Qué tienes?

Todo se networkinguce a cómo diseña su algorithm. Por supuesto, hay excepciones a cada regla.

No debe haber una diferencia discernible en el performance, especialmente para el tipo de código que describa, que básicamente será un código C comstackdo por el comstackdor Objective-C.

Se networkinguce al algorithm, pero en el ensamblaje puede hacer cosas que C generalmente no puede hacer. Esto incluye organizar ciertas llamadas del progtwig para que no se requiera empujar y tirar a la stack.

Si necesita dividir por 2, por ejemplo, un lote para una tarea determinada, en el ensamblaje puede simplemente hacer un cambio de logging (o un par de cambios si es un gran número). C generalmente tendrá que hacer una llamada, empujar y tirar a la stack y solo la sobrecarga lo hará mucho más lento.

Entonces sí, lo anterior es técnicamente una diferencia de algorithm, pero la progtwigción de ensamblaje le permite hacerlo. Luego aplica la idea anterior a un set de funciones matemáticas y la diferencia de velocidad puede ser pronunciada. Para minimizar el efecto en C, obviamente, es hacer que el nuevo código de ensamblaje se convierta en una biblioteca para C. Aún tendrá sobrecarga en comparación con ensamblador directo, pero también obtendrá el mejor algorithm posible con la mayor productividad del lenguaje de nivel superior .