null 할당과 비교하여 변수 할당이 비쌉니까? 예를 들어 foo가 null을 할당하기 전에 foo가 null이 아닌지 확인해 보는 것이 좋을까요?null에 할당하기 전에 변수가 null인지 확인하십시오.
if (foo != null) {
foo = null;
}
아니면 아무것도 걱정하지 않습니까?
null 할당과 비교하여 변수 할당이 비쌉니까? 예를 들어 foo가 null을 할당하기 전에 foo가 null이 아닌지 확인해 보는 것이 좋을까요?null에 할당하기 전에 변수가 null인지 확인하십시오.
if (foo != null) {
foo = null;
}
아니면 아무것도 걱정하지 않습니까?
이것은 마이크로 마이크로 최적화 (어쨌든 컴파일러가 처리 할 수있는 기능)입니다. 그것에 대해 걱정하지 마십시오. 실제 알고리즘에 초점을 맞추면 훨씬 더 많은 수익을 얻을 수 있습니다.
조기 최적화는 모든 효율성의 약 97 %를 잊지 말아야합니다. 조기 최적화는 모든 악의 뿌리입니다. - Donald Knuth
차이가 본질적으로 0이되었으므로 어느 것이 더 명확할까요? 수표로 또는없이? – Albert
수표가 없습니다. –
@mike, 당신 말이 맞아요. 하지만, 우리는 여기서 실제적인 질문에서 벗어나지 않고 있습니까? 질문이 더 효율적일 것입니다. 그러나 우리는 작은 일에 너무 많은 시간을 쓰지 말아야하는 방법에 대해 이야기하고 있습니다. 우리가 이야기하고있는 좋은 관행과 질문에 대한 대답이 아닙니다! –
실제로 이것은 매우 효율적입니다.보다 작은 입니다. 변수 할당은 null 체크와 대략 동일하며 가능한 추가 분기가 있습니다. 별로 다르지 않다.
아니면 아무것도 걱정하지 않습니까?
가져 왔습니다.
걱정하지 않으셔도됩니다. 코드를 추가하면됩니다. 이것은 미세 최적화의 일종으로 lots가없는 경우이 병목 현상임을 증명하는 문서화 된 증거입니다.
foo = null;
if (foo != null)
foo = null;
내가 두 번째 블록 코드를 보면 당신은 단지 그것을 전에 null이 아닌 경우 null로 foo는 변수를 설정하고 싶다고 생각하고, 내가 첫 번째 코드를 보면 내가 생각 어쨌든 변수 foo를 null로 설정하기를 원합니다.
필자가 작성한 예제로 인해 이것이 알지만, 결국에는 이런 종류의 마이크로 최적화가 혼란 만 가중시킬뿐입니다.
어떤 버전이 더 혼란 스럽습니까? – Albert
이렇게해도 효과는 거의 없거나 전혀 없습니다. 나는 당신이 차이를 증명할 수있는 벤치 마크를 만들 수 있다고 생각하지 않습니다.
A가 (선언의 외부) 보통 입니다 변수에 "널 (null)"을 지정 :
사실, 일부는 전혀 null로 할당하는 코드 냄새합니다 (PMD detector for NullAssignment 참조)임을 주장 나쁜 형태. 경우에 따라 할당은 프로그래머가 코드에서 진행중인 작업을 완전히 이해하지 못했다는 표시입니다. 참고 : 이러한 일종의 할당 은 가끔씩 가비지 수집을 권장하는 데 유용 할 수 있습니다.당신이 에 의해, 모든 수단을 그것을 사용하고 무엇 경우, 일반적으로
:-)이 규칙을 무시, 내가 가비지 수집을 장려하기 위해 시도 아무것도 개인적으로 의심 해요 (당신은 거의 항상 효과를 얻을 수 당신이 기대하지 않았던).
맞습니다. 의미있는 차이가있는 벤치 마크를 만들 수 없습니다. null에 할당하는 것이 나중에 빈약 한 것인지 아닌지에 대해 깊이 생각할 것입니다. 감사! – Albert
우선, 마이크로 최적화입니다. 그래서 걱정할 필요가 없습니다.
하지만 질문에 대답하려면 한 줄로 줄여야합니다. (모든 코드가 NULL을 설정하는 것처럼). 그 인
foo = NULL;
이유는,
비교 할당보다 훨씬 비싼 작업입니다. (비교는 많은 어셈블리 명령어를 비교적 많이 먹는다. 일반적으로, 뺄셈과 0 또는 XOR 비교와 0 비교). 배정은 지시 사항을 적게 사용합니다.
"비교는 과제보다 훨씬 비용이 많이 드는 작업입니다." – user
괜찮은 컴파일러를 사용하면 동일한 코드가 생성됩니다. 당신이 진절머리 나는 컴파일러를 가지고 있다면 if
을 가진 컴파일러는 더 나쁠 것입니다. 2009 년 하드웨어에 대한 변수 할당은 매우 저렴하고 조건부 분기는 때로는 비쌀 수 있습니다.
나는 모든 대답에서 (일관된) 메시지가 중요하다고 생각하기 때문에이 질문을 upvoting하고있다. IMHO, 아래에 인용 된 크 누스는 절대적으로 옳습니다. 그리고 이것이 문제가되는 3 %의 경우에 빠졌음에도 불구하고 단단한 프로파일 링과 벤치마킹 만이 명확한 답을 줄 것입니다. – RBerteig
나는 일관된 답변을 통해 내가 분명히 잘못된 것을 발견했다는 것을 알 수 있습니다 ... – Albert