문제

C 소스 코드를 고성능 Java Bytecode로 컴파일하는 방법을 찾고 있습니다. 나는 성공적으로 사용했습니다 Nestedvm, 그러나 내가 작업중 인 프로젝트에는 성능이 허용되지 않습니다. 또한이 문제와 몇 가지 상업용 제품을 목표로하는 다양한 오픈 소스 프로젝트를 보았습니다.이렇게 질문 비 자바를 Java 소스로 변환하는 일반적인 문제를 다루지 만 C에서 Java Bytecode로만 가고 싶습니다.

C 소스 코드를 고성능 순수한 Java 바이트 코드로 컴파일하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

음, "컴파일러"라고합니다. JVM을 대상으로하는 C 컴파일러를 요구합니다.

그것을 위해 구글.

다른 팁

저자입니다 시빌, 나는 여기서 편견이있을 수 있습니다. 어쨌든, 나는 Axiomatic C 컴파일러에 의해 생성 된 Java Bytecode를 보았지만 효율적이지 않습니다. NestedVM과 Cibyl은 MIPS 바이너리를 컴파일 한 다음 이진을 Java 바이트 코드로 변환하여 작동합니다. 놀랍게도 효율적이며 주요 문제는 8- 및 16 바이트 값의 메모리 액세스 (여러 단계로 수행해야 함)입니다.

NestedVM과 Cibyl은 성능 특성이 약간 다릅니다. Cibyl은 일반적으로 정수가 많은 워크로드의 경우 일반적으로 더 빠르며 Nestedvm은 플로트를 처리하고 복식을 더 잘 처리합니다. Cibyl은 GCC Soft-Float Support ( "실제"Java Bytecode Floating Point 명령어를 사용하지만)를 사용하고 Nestedvm은 MIPS FPU 지침을 번역하기 때문입니다.

Cibyl은 또한 J2ME 환경을 대상으로하지만 다른 플랫폼에서도 확실하게 사용할 수 있습니다. 내 생각에 Axiomatic C 컴파일러보다 더 운이 좋을 것입니다.

정확히 당신이 요청한 것이 아니라 시빌 변환 편집 C 프로그램 JVM 바이트 코드로 프로그램. NestEdVM과 동일한 아이디어 (언급 한)이지만 작업이 독립적 인 구현 방법이라는 작업이 더 빠를 수 있습니다.

나는 일부 프로젝트가 이것을 시도했다고 생각하지만, 무엇에 액세스 할 수 있는지에 대한 꽤 심각한 제한없이 포인터를 처리 할 수있는 방법은 없다 (본질적으로는 배열 인덱스로 변환해야하며 메모리 대신 할당 된 배열로 변환해야한다).

Pointers에 너무 의존하지 않고 C가없고 JVM으로 원한다면, JAVA로 변환 할 수 있습니다. 매우 쉬우 며 성능이 너무 나쁘지 않아야합니다. C는 여전히 대부분의 영역에서 Java를 약 2 배, 일부 영역에서는 훨씬 더 나쁘고 몇몇 영역에서 Java는 실제로 C (힙 메모리 관리, 1)를 능가하지만 대부분의 다른 언어 (적어도 해석 된 언어), Java 및 C는 A가 있습니다. 100x 더 빠르기 때문에 그들 사이의 차이는 그 관점에서 상당히 의미가 없습니다.

C2J 소프트웨어를 시도하십시오 ................

Google에서 C 형에서 Java Translator.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top