2015-01-06 4 views
3

사실 저는 .NET Framework의 메모리 모델에 익숙합니다.CPU 레지스터에 로컬 변수 할당

JIT 컴파일러가 스택에 변수를 할당하는 대신 응용 프로그램의 성능을 향상시키기 위해 CPU 레지스터에 로컬 변수를 배치 할 수 있는지 알고 싶습니다. 가능한 경우 그러한 할당에 대한 요구 사항은 무엇이며이를 수행할지 여부는 어떻게 결정합니까?

+4

지터 최적화 프로그램에서 수행하는 표준 최적화 중 하나입니다. 릴리스 빌드를 배포하는 것 이외에 필요한 작업이나 수행 할 작업이 없습니다. [이 게시물] (http://stackoverflow.com/questions/4043821/performance-differences-between-debug-and-release-builds/4045073#4045073)에는 최적화 프로그램에 대한 배경 지식이 있습니다. –

답변

3

JIT는 항상이 작업을 수행하고 있습니다. 거의 모든 JIT 및 원시 컴파일러에 대한 표준 최적화입니다.

논리 IL 스택을 jitted 코드에서 사용하는 실제 x86 스택과 혼동하지 마십시오. 그들은 매우 약하게 관련되어 있습니다. 일리노이 스택 내용과 일리노이 주민들은 레지스터에 저장되고 필요한 경우에만 x86 스택에 저장됩니다.

유일한 예외는 .NET 4.5 JIT 및 vNext RyuJIT (VS2015 미리보기 기준)에 일반적으로 스택 할당 된 구조체입니다. 이것은 문서화되어 있지 않지만 테스트에서는 구조체가 등록되지 않은 간단한 경우조차도 명확하게 보여줍니다. 어쩌면 나는 그것이 일어나는 어떤 경우를 놓쳤을 것이지만 그것은 드문 경우입니다.

기본 유형 및 객체 참조는 내 테스트에 따라 일관되게 레지스터 (사용 가능한 경우)에 저장됩니다.

관련 문제