.NET 곱셈 최적화
-
03-07-2019 - |
문제
컴파일러가 곱셈을 1 씩 최적화합니까? 즉, 고려 :
int a = 1;
int b = 5 * a;
표현 5 * a는 단지 5로 최적화됩니까? 그렇지 않은 경우 A가 다음과 같이 정의되면 다음과 같습니다.
const int a = 1;
해결책
문자열 연결을 포함하여 컴파일 할 때 일정한 표현식을 미리 계산합니다. 없이 const
혼자 남겨질 것입니다.
첫 번째 예제는이 IL로 컴파일됩니다.
.maxstack 2
.locals init ([0] int32, [1] int32)
ldc.i4.1 //load 1
stloc.0 //store in 1st local variable
ldc.i4.5 //load 5
ldloc.0 //load 1st variable
mul // 1 * 5
stloc.1 // store in 2nd local variable
두 번째 예제는 다음과 같습니다.
.maxstack 1
.locals init ( [0] int32 )
ldc.i4.5 //load 5
stloc.0 //store in local variable
다른 팁
일정한 전파는 가장 일반적이고 가장 쉬운 최적화 중 하나입니다.
모노 컴파일러에서 생성 된 코드를 살펴보면, 비 초가 A가있는 버전은 런타임에 곱셈을 수행합니다. 즉, 곱셈은 최적화되지 않습니다. Const를 만들면 곱셈이 최적화됩니다.
Microsoft 컴파일러는보다 공격적인 컴파일러를 가질 수 있습니다. 가장 좋은 솔루션은 컴파일러에서 생성 한 코드를보고 그것이 수행하는 작업을 확인하는 것입니다.
컴파일러가 여기서 최적화하는 것은 1 인분의 곱셈이 아니라 컴파일 타임에 알려진 값으로 산술적입니다. 그렇습니다. 컴파일러는 예를 들어 있거나없는 예제의 모든 수학을 최적화합니다. const
.
편집하다: ㅏ 능숙한 컴파일러, 말해야합니다.
제휴하지 않습니다 StackOverflow