2012-04-06 5 views
2

사람들은 "1 비트 왼쪽으로 시프트"를 쓰는 대신에 "2 배로"쓰기 만합니다. 훨씬 더 읽기 쉽기 때문에 컴파일은 최적화를 수행 할만큼 똑똑 할 것입니다.컴파일러 최적화의 한계는 무엇입니까? 얼마나 똑똑한가요?

일반적으로 컴파일해야 할 것은 무엇이며 개발자는하지 않아야합니다 (코드 가독성을 위해)? 저는 string == "" 대신 항상 string.length == 0이라고 쓰고 있습니다. 왜냐하면 제가 5-6 년 전에 읽었던 숫자 조작이 훨씬 빠르기 때문입니다. 아직도 사실입니까?

또는 대부분의 컴파일러는 다음과 같은 똑똑 변환하는 것입니다 :

int result = 0; for (int i = 0; i <= 100; i++) { result += i; }

로 : int result = 5050;?

대부분의 컴파일 작업이 수행하지 않기 때문에 내가 좋아하는 "최적화"는 무엇입니까?

+1

컴파일러가 수행 할 수있는 모든 최적화를 열거 할 수있는 방법은 없습니다. (그들 중에는 많은 것들이 있습니다.) 더 구체적인 예가 있습니까? – Mysticial

+1

어떤 컴파일러입니까? – SLaks

+0

죄송합니다, 제 질문은 특정 컴파일러 또는 특정 알고리즘에 맞지 않습니다. 나는 당신 같은 훌륭한 개발자로부터 멋진 코드를 배울 수 있기를 바라는 일반적인 질문을하고 싶다. – user1032613

답변

5

알고리즘 : 지금까지 행성에 컴파일러가 없었기 때문에 더 나은 알고리즘을 선택할 수 있습니다. 너무 많은 사람들이 벤치 마크 이후에 급히 다시 쓰기 C 부분으로 뛰어 들었을 때, 처음에 사용중인 알고리즘을 대체 할 것으로 생각해야했습니다.

+1

오, 당신은 놀라실 것입니다 ... 컴파일러는 실제로 *** (어떤 경우에는) 당신이하고있는 것을 인식하고 더 나은 알고리즘을 선택할 수 있습니다 ... – Mysticial

+0

그리고 다른 측면을 논하기 위해 컴파일러도 될 수 있습니다 놀랍도록 어리 석고 인간 프로그래머에게는 사소한 것들을 놓치지 마십시오 ... – Mysticial

+0

@Mysticial 당신이하고있는 것을 인식 할 때 더 나은 알고리즘을 선택하는 컴파일러의 예를들 수 있습니까? 나는 어떤 것도 모르고있다. – chuckj

관련 문제