2012-06-28 3 views
2

메모리 누수 문제를 해결하는 것은 좋은 일이지만, 메모리 문제와 별도로 알고 싶습니다. 메모리 누수 수정은 성능 향상에도 도움이됩니다.메모리 누출 및 코드 성능

+0

"메모리 누수를 찾는 것이 좋은 것"이 아니라, * 쓰기 * 메모리 누수가 기본적으로 언어 또는 마스터를 제어하지 못한다는 것을 의미하는 매우 나쁜 것입니다. 당신의 디자인. –

답변

3

일반적으로 그렇습니다. 주된 이유는 메모리 누수가 발생하면 프로그램이 지속적으로 캐시에없는 새로운 메모리를 시스템에서 얻게 될 것이기 때문입니다. 메모리를 적절히 비우면 곧 동일한 메모리가 다시 사용되며 캐시에 이미 저장됩니다.

+1

데이터없이 이것을 구입할지는 잘 모르겠습니다. 인수의 다른 측면은 할당 비용의 절반이 free() 호출에서 지불된다는 것입니다. 당신이 그것을 건너 뛰면, 당신은 더 적은 일을하고 있습니다. 데이터가 한번 쓰고 다시 읽혀 진다면 (누출 가능성이있는 것처럼 보임), 캐시 효과는 중요하지 않습니다. 쓰기에서 한 번 캐시로 이동하여 거기에서 처리 된 다음 나머지 부분을 소비하도록 플러시됩니다. DRAM에. 성능 효과는 응용 프로그램에 따라 크게 달라질 수 있습니다. –

+1

메모리가 제대로 릴리스되지 않으면 결과가 가장 큰 메모리 발 인쇄라고 생각합니다. 따라서 RAM과 HD간에 더 많은 데이터를 페이징해야합니다. 이로 인해 성능이 저하됩니다. 그래서 다시 사용하지 않을 경우 항상 메모리를 비우십시오. –

+0

@AndyRoss : 캐시가 관련성이 없습니다. 메모리에 기록하려면 L2 캐시에 독점적으로 보관해야합니다. 새로운 메모리를 할당하면 그렇지 않을 것입니다. 기존 메모리를 다시 사용하면됩니다. 이러한 캐시 효과는 현명한 메모리 관리 구현에서 '무료'비용을 절감합니다. (시스템은 이전 값이 무의미하다는 점을 고려하지 않고, 이전 값을 무효화해야한다는 것을 알고 있으며, 외부 (코어에 대한) 조작은 매우 비싸다는 것을 알고 있습니다. –

1

눈에 띄는 방법은 아닙니다. 캐시 성능을 약간 향상시킬 수 있습니다. 또한 은 사용 가능한 메모리가없는 시스템에서 성능 차이를 보일 수도 있지만 시스템에서 훨씬 더 크고 눈에 띄는 성능 병목 현상이 발생할 것입니다.

0

이것은 코드에서 상당히 다를 수 있습니다. 예를 들어, delete는 소멸자의 코드에 따라 시간이 오래 걸릴 수있는 객체의 소멸자 (메모리 할당을 해제하는 시간 외)를 호출합니다. 반면에 캐시 미스는 작은 객체와 관련이 있으며 매우 큰 객체의 페이지 오류와 관련이 있으므로 메모리 누출을 피하면 성능이 크게 향상 될 수 있습니다.

즉, 성능 최적화를 위해 이보다 훨씬 낮은 매달린 과일이있을 가능성이 높습니다.

1

글쎄, 실제로 메모리 누수는 XD 할당을 해제하는 시간을 절약하기 때문에 실제로 성능이 향상됩니다. 물론 여유 메모리가 부족하면 시스템에 성능 문제가 발생할 수 있습니다.