test에서 c에 대한 명시 적 할당과 비교하여 test2의 add (a, b) 반환 값과 관련하여 발생하는 상황은 무엇입니까? 반환 값을 사용하여 변수에 즉시 할당
void test(int a,int b) {
int c=add(a,b);
return incr(c);
}
void test2(int a,int b) {
return incr(add(a,b));
}
는 아마도 참고로 할당// JITs 이론적 동일한 JVM은 AVM2, 자바 스크립트 인터프리터 용 IE 바이트 코드의 구현에서의 값이다.
아마도 명명 된 값 (변수)과 명명되지 않은 값은 모두 스택의 상황 별 위치에 대한 격리 된 지침입니다. 즉, 반환 값을 다음 명령으로 슬쩍 돌리는 마법적인 최적화는 없습니다.
즉 에있는 incr
명령은 여전히 incr 3rd value of the stack
또는 그와 비슷한 결과를 가져옵니다.
최적화에 따라 차이가 없을 수 있습니다. 그것의 컴파일러 것. 이 두 가지 차이점은 C에 의해 정의되지 않았습니다. – chux
컴파일러에서 생성 한 코드를 직접 확인하십시오 (빌드 릴리스). 당신은 그들이 똑같은 것을 볼 것입니다! 나는 Beginers 프로그래밍 수업에 대해 놀랍습니다. 읽기 쉽고 이해하기 쉬운 것이 아닌 비 감각적 인 최적화에 대해 이야기합니다. : O –
명명 된 임시 변수가 비싸다고 생각합니까? 비용이 발생했다고 믿는 단위는 무엇이며, 그 비용은 왜 당신에게 중요한가? 저장 위치에 이름이 없거나 존재하지 않는다고 생각합니까? 'add'의 결과는 * 어딘가에 가야합니다 *; 그 위치에 이름을 지정하지 않으면 여전히 존재합니다. –