문제

나는 첫 번째로 일하는 Symbian 응용 프로그램을 거의 완성했지만, 서두르는 학습에서 메모리 관리에 거의 관심을 기울이지 않았고 스택을 밀고 청소하는 데 거의 관심을 기울이지 않았습니까?

누군가가 여기에서 사용할 모범 사례 중 일부와 최고의 누출 탐지/메모리 프로파일 링 도구의 방향으로 나를 지적 할 수 있습니까?

예를 들어, 함수 내부에서 tdesc 또는 tptrc16을 잡으면 어떻게 가장 좋은 방법을 청소합니까?

TPtrC16 temp = ...
temp.CleanupClosePushL();
CleanupStack::PopAndDestroy()

..모두를위한?

감사합니다. 용서 해주세요. 저는 자백 한 Symbian N00B입니다.

도움이 되었습니까?

해결책

나는 과거에 사용되었습니다 Symbian의 Hooklogger 메모리 누출을 추적하고 조사합니다. 최고는 아니지만 확실히 도움이됩니다. 또한 힙 마커는 응용 프로그램을 종료 할 때마다 메모리 누출이 발생할 경우 할당 패닉을 증가시킵니다. 패닉이 제공하는 정보는 거의 도움이되지 않지만 어딘가에 메모리 누출이 있음을 알 수 있습니다. 거기에서 HookLogger와 같은 도구를 사용하여 누출이 소개되는 코드의 일부를 좁힐 수 있습니다.

나는 몇 가지 심부리 자원을 언급했다 이 스레드에 대한 답변으로. 그 모든 것이 나에게 가장 유용했지만 나는 책을 찾았다 공인 된 Symbian Developer Primer 엄청나게 도움이됩니다. 당신이 당신의 손을 잡을 수 있다면, 나는 그것을 추천 할 것입니다. 빠른 읽기이지만 메모리 관리 및 설명자에 관한 것들을 포함하여 개념을 훌륭하게 설명합니다.

다른 팁

스택에 저장된 것은 정리 스택에 저장 될 필요가 없습니다 (특별 처리가 필요하지 않은 한 클래스 등, 아래 참조).

정리 스택은 휴가 (생각 예외)가 발생할 때 객체를 삭제하기위한 것이며, 그렇지 않으면 메모리 누출이 발생합니다.

정리 스택의 실제 사용은 정적 기능 CleanupStack :: Pushl (..) 및 CleanupStack :: POP / POPANDDESTROY를 통해입니다.

RFILE, RFS와 같은 일부 클래스는 삭제되지 않고 닫아야하므로 이러한 함수의 경우 다음 기능이 호출되므로 휴가에서 객체에서 삭제 연산자를 호출하는 대신 글로벌 기능 CleanupClosePushl ()을 사용해야합니다. 대신 클래스 ':: 닫기 기능을 호출합니다.

메모리 누출에 대한 코드를 확인하려면 매크로를 사용할 수 있습니다 __UHEAP_MARK; 및 __UHEAP_MARKEND; 이 두 통화 사이에서 힙에 아무것도 남지 않은지 확인합니다.

Cactive 's :: Runl에서 CleanupStack에 아무것도 남겨두면 활성 스케줄러가 당황합니다.

일반적인 기술로, 당신이 호출하는 기능이라면 ~할 수 있었다 왼쪽 (후행 'l'로 표시)은 삭제되거나 닫아야하는 모든 theign을 정리 스택에 추가해야합니다.

Symbian C ++의 CleanupStack 및 메모리 관리에 대해 알아야 할 모든 것을 적절하게 추출하려면 10 페이지 미만이 걸립니다.

Shameless Plug :이 책은 N00bness 수준을 위해 특별히 작성되었습니다.http://www.quickrecipesonsymbianos.com

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top