Pregunta

Estoy buscando una manera de compilar el código fuente C en código de bytes Java de alto rendimiento. He utilizado con éxito NestedVM , pero el impacto en el rendimiento no es aceptable para un proyecto en el que estoy trabajando en. También he visto varios proyectos de código abierto dirigidos a este problema y un par de productos comerciales. Esta pregunta SO se ocupa del problema general de convertir no Java en la fuente de Java, pero solo quiero ir de C a código de bytes de Java.

¿Cuál es la mejor manera de compilar el código fuente C en código de bytes Java puro de alto rendimiento?

¿Fue útil?

Solución

Um, eso se llama " un compilador " ;. Estás pidiendo un compilador de C que apunte a la JVM.

Google para eso .

Otros consejos

Siendo el autor de Cibyl , podría estar sesgado aquí. De todos modos, he mirado el código de bytes de Java generado por el compilador axiomático C, y no es eficiente. NestedVM y Cibyl funcionan compilando binarios MIPS y luego traduciendo el binario en código de bytes Java. Es sorprendentemente eficiente, con el principal problema que es el acceso a la memoria de valores de 8 y 16 bytes (que debe hacerse en varios pasos).

NestedVM y Cibyl tienen características de rendimiento ligeramente diferentes, siendo Cibyl típicamente más rápido para cargas de trabajo pesadas de enteros, mientras que NestedVM maneja los flotadores y se dobla mejor. Esto se debe a que Cibyl utiliza el soporte de flotación suave GCC (aunque utiliza las instrucciones de punto flotante de bytecode real de Java) mientras que NestedVM traduce las instrucciones de FPU de MIPS.

Cibyl también está más dirigido a entornos J2ME, aunque definitivamente también se puede usar en otras plataformas. Supongo que tendrías más suerte con cualquiera de ellos que con el compilador Axiomatic C.

No es exactamente lo que pediste, pero Cibyl convierte compilado C programas en JVM bytecode. Es la misma idea que NestedVM (que mencionó), pero podría ser más rápido para su tarea, ya que es una implementación independiente.

Creo que algunos proyectos han intentado esto, pero simplemente no hay forma de lidiar con punteros sin algunas restricciones bastante severas sobre qué puede acceder a qué (esencialmente tienen que convertirse en índices de matriz y matrices asignadas en lugar de memoria)

Si tiene C sin depender demasiado de los punteros, y lo quiere en la JVM, puede convertirlo a Java, debería ser bastante fácil y el rendimiento no debería ser tan malo. C todavía supera a Java en la mayoría de las áreas en aproximadamente 2 veces, con algunas áreas mucho peores y en algunas áreas Java realmente supera a C (gestión de memoria de almacenamiento dinámico, por ejemplo), pero en comparación con la mayoría de los otros lenguajes (al menos interpretados), Java y C son 100 veces más rápido, por lo que la diferencia entre ellos no tiene sentido desde ese punto de vista.

pruebe el software C2J ................

escriba c al traductor java en google. obtendrá el enlace para descargar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top