Pergunta

Eu estou procurando uma maneira de compilar o código fonte C em alto desempenho bytecode Java. Eu tenho usado com sucesso NestedVM , mas o impacto no desempenho não é aceitável para um projeto que eu sou trabalhando em. Eu também vi vários projetos de código aberto destinadas a este problema e um par de produtos comerciais. ofertas Esta questão SO com problema geral de converter não-Java em fonte de Java, mas eu só quero ir de C para bytecode Java.

Qual é a melhor maneira de compilar o código fonte C em alto desempenho, puro bytecode Java?

Foi útil?

Solução

Um, que é chamado de "um compilador". Você está pedindo um compilador C que as metas do JVM.

Google para que .

Outras dicas

Ser o autor da Cibyl , eu poderia ser tendenciosa aqui. Enfim, eu olhei para o bytecode java gerado pelo compilador C axiomático, e não é eficiente. NestedVM e Cibyl ambos os trabalhos de compilação de MIPS binários e, em seguida, traduzir o binário em bytecode Java. É surpreendentemente eficiente, com o principal problema é o acesso à memória de valores de 8 e 16 bytes (o que precisa ser feito em várias etapas).

NestedVM e Cibyl ter um pouco diferentes características de desempenho, com Cibyl tipicamente ser mais rápido para cargas de trabalho inteiros-pesado enquanto NestedVM lida com carros alegóricos e duplas melhores. Isso ocorre porque Cibyl usa o suporte GCC soft-float (embora usando "real" Java bytecode instruções de ponto flutuante), enquanto NestedVM traduz instruções MIPS FPU.

Cibyl é também mais direcionados para ambientes J2ME, embora seja definitivamente utilizável em outras plataformas também. Meu palpite é que você teria mais sorte com qualquer um deles do que com o compilador Axiomatic C.

Não é exatamente o que você pediu, mas Cibyl convertidos compilado programas em C em JVM bytecode. É a mesma idéia que NestedVM (que você mencionou), mas pode ser mais rápido para a sua tarefa de ser como a forma como ele é uma implementação independente.

Eu acredito que alguns projetos têm tentado isso, mas simplesmente não há maneira de lidar com ponteiros sem algumas restrições muito severas sobre o que pode acessar o que (essencialmente eles têm de ser convertidos em índices de matriz e matrizes alocados em vez de memória)

Se você tem C sem demasiada dependência de ponteiros, e quer que ele na JVM, você pode simplesmente convertê-lo em Java - deve ser muito fácil e o desempenho não deve ser muito ruim. C ainda bate Java na maioria das áreas em cerca de 2x com algumas áreas muito pior e em algumas áreas Java realmente bate C (gestão de memória heap, por exemplo), mas em comparação com a maioria das outras línguas (aqueles interpretados pelo menos), Java e C são 100x mais rápido, então a diferença entre eles é bastante sem sentido a partir desse ponto de vista.

tentar software C2J ................

tipo c para tradutor java no Google .Você receberá o link para baixar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top