2012-04-02 4 views

답변

3

사실, 그렇습니다. 자주 신경 쓰지는 않지만 at least one case (MSIL에서 and을 건너 뛰면 코드가 더 빨라집니다). 아마도 CLR JIT 컴파일러가 그다지 똑똑하지는 않습니다.

+0

나에게이 말은 매우 구체적인 사례처럼 들리지만, 내가 잘 알면 나는 묻지 않을 것이다. ^^ – Llamageddon

+0

@Asmageddon 잘 예로 들었다. C# 및 Java 컴파일러는 많은 최적화 작업을 수행하지 않고 JIT 컴파일러에 의존하여 문제를 해결합니다. 분석을 수행하는 데 시간이 너무 많이 걸리기 때문에 때때로이 작업을 수행하지 않습니다. 이러한 경우에는 지능형 IL을 작성하여 JIT를 도울 수 있습니다. – harold

+0

논리적으로 들립니다. 다른 두 가지 답변에 대한 귀하의 의견은 무엇입니까? – Llamageddon

-1

아니요. 대부분의 고급 언어에 대한 바이트 코드는 매우 높은 수준이며 일반적으로 언어가 사용하는 숙어에 잘 부합합니다. 컴파일러가 이미 수행 한 것 이외의 간단한 작업을 수행하는 코드를 작성할 수 없습니다 적어도 느리게 만들지 않고서는 방출한다.

손으로 만들어진 어셈블러의 속도 향상은 영리한 레지스터 사용, 기계 고유의 opcode 등을 사용하여 발생합니다. 상위 수준의 바이트 코드를 작성할 때 제어 할 수없는 모든 것.

비정상적인 코드를 내뿜는 경우 - 스택 기반 VM에서는 값이 두 번 사용되고 있음을 알 수 있습니다. 임시 변수를 내보내는 대신 영리한 것을 사용하면 나중에 스택에 남겨두고 두 번에 섞습니다 .. 당신은 아마도 열심히 명중했습니다. JIT는 더 이상 관용구를 인식하지 못하고 그 결과로 끔찍한 코드를 방출합니다. 나는이 직접적인 방출 런타임에 의해 생성 된 MSIL-이 방출하는 것이 컴파일러가 생성 한 코드와 닮지 않았다면 아마 실패 할 것입니다.

물론 저는 여기서 MSIL에 대해 구체적으로 말하고 있습니다.하지만 일반적으로는 사실이라고 생각합니다.

+0

네 말이 맞아, 내 잘못이야! –

+0

Downvoter, 왜 물어 봐도 될까요? 제 대답은 제 생각에 H-H와 비슷합니다. – Mania

+0

나는 아마도 당신이 어느 쪽의 방법 으로든 끝날지라도 추가해야만한다. 나는 우리가 ** 상당한 성능 향상에 대해 이야기하고 있다고 가정했는데, 이는 바이트 코드를 방출하는 것을 보증 할 수있는 종류의 것이지 사용자가 알아 차릴 수없는 1-2 %의 이득이 아닙니다. – Mania

0

아니요, 권장하지 않습니다. 예를 들어 일부 JVM의 JIT (Just-In-Time) 컴파일 기능은 바이트 코드 패턴을 검색하여 런타임에이를 최적화합니다. 자신의 트위스트 바이트 코드로 대체하면 JIT가 작동하지 않을 수 있으며 더 느린 코드로 끝나게됩니다. Java 프로그램을 난독화할 때 때때로 발생합니다.

+0

"불가능"하지 않는 것이 좋습니다. 컴파일러와 같은 것을 항상 쓸 수 있기 때문에 잘못하지 않는 한 악화되지 않습니다. – harold