Domanda

Sto cercando un modo per compilare il codice sorgente C in bytecode Java ad alte prestazioni. Ho usato con successo NestedVM , ma l'hit performance non è accettabile per un progetto lavorandoci. Ho anche visto vari progetti open source volti a questo problema e un paio di prodotti commerciali. Questa domanda SO tratta del problema generale della conversione non Java nel sorgente Java, ma voglio solo passare dal bytecode C al codice Java.

Qual è il modo migliore per compilare il codice sorgente C in bytecode Java puro ad alte prestazioni?

È stato utile?

Soluzione

Uhm, questo è chiamato " un compilatore " ;. Stai chiedendo un compilatore C che abbia come target la JVM.

Google per quello .

Altri suggerimenti

Essendo l'autore di Cibyl , potrei essere distorto qui. Ad ogni modo, ho esaminato il bytecode java generato dal compilatore assiomatico C, e non è efficiente. NestedVM e Cibyl funzionano entrambi compilando i binari MIPS e quindi traducendo il binario in bytecode Java. È sorprendentemente efficiente, con il principale problema è l'accesso alla memoria di valori di 8 e 16 byte (che deve essere fatto in più passaggi).

NestedVM e Cibyl hanno caratteristiche di prestazione leggermente diverse, con Cibyl che in genere è più veloce per carichi di lavoro a numero intero mentre NestedVM gestisce i galleggianti e raddoppia meglio. Questo perché Cibyl utilizza il supporto soft-float GCC (sebbene utilizzi le istruzioni in virgola mobile del bytecode Java "reale") mentre NestedVM traduce le istruzioni FPU MIPS.

Cibyl è anche più mirato agli ambienti J2ME, sebbene sia sicuramente utilizzabile anche su altre piattaforme. Suppongo che avresti più fortuna con entrambi che con il compilatore Axiomatic C.

Non è esattamente quello che hai chiesto, ma Cibyl converte compilato programmi C nel bytecode JVM. È la stessa idea di NestedVM (che hai menzionato) ma potrebbe essere più veloce per il tuo compito in quanto è un'implementazione indipendente.

Credo che alcuni progetti abbiano tentato questo, ma non c'è modo di gestire i puntatori senza alcune restrizioni piuttosto severe su ciò che può accedere a ciò (essenzialmente devono essere convertiti in indici di array e array allocati anziché in memoria)

Se hai C senza fare troppo affidamento sui puntatori e lo vuoi in JVM, potresti semplicemente convertirlo in Java - dovrebbe essere abbastanza facile e le prestazioni non dovrebbero essere troppo cattive. C batte ancora Java nella maggior parte delle aree di circa 2 volte con alcune aree molto peggio e in alcune aree Java batte effettivamente C (gestione della memoria heap, per uno), ma rispetto alla maggior parte delle altre lingue (almeno interpretate), java e c sono 100 volte più veloce, quindi la differenza tra loro è piuttosto insignificante da quel punto di vista.

prova il software C2J ................

digita c in traduttore java in google. otterrai il link per il download

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top