내 앱에서 웹캠에서 YUV422 이미지를 처리하려고합니다. 하지만 엄청난 메모리 누수가 발생합니다. 아래에서 내 앱의 간단한 코드 샘플을 볼 수 있습니다. 함수에서 "(m1 ..."줄을 사용하지 않으면 누수가 없습니다. 그러나 이미지는 처리되지 않습니다.) 잠금, 풀 등을 시도했지만 아무 것도 변경되지 않았습니다. 비교적 새로운 기능입니다. 코코아로 모든이 대괄호가 나에게 재미 있고 두려운 것처럼 보입니다 ;-)
"char"을 사용하는 데 문제가 있습니까? 내 오래된 리눅스 + C에서 + + 애플 리케이션 거기에 아무 문제가 없었다. 하지만, 어떤 스레드를 "서명되지 않은 숯불 *"를 사용하지 않고 있었고, 나는- (void) processImage : (char *) image; --- char *로 인해 메모리 누수가 발생합니까?
글로벌 ... 누출 검사 적이있다 :
...
char m [640*480];
"주요"
...
[NSThread detachNewThreadSelector:@selector(processOutputBuffer) toTarget:self withObject:nil];
...
기능 1 :
- (void)processOutputBuffer {
[NSThread setThreadPriority:0.4];
[lock lock];
...
Ptr outputBufferBaseAddress = (Ptr)CVPixelBufferGetBaseAddress(outputBuffer);
CVPixelBufferLockBaseAddress(outputBuffer, 0);
[self yuv422_to_y8uv8:outputBufferBaseAddress m1:m];
...
}
기능 2 :
- (void) yuv422_to_y8uv8:(char *)image m1:(char *)m1 {
int x,y;
for (y = 0; y < 480; y++)
for (x = 0; x < 640; x++)
{
*(m1 + (640 * y) + (x))=*(image + (640*2 * y) + (x*2)+1);
}
}
정적 분석기가 몇 가지 문제점을 발견했지만 누출은 없었습니다. 악기 (v1.5에서 xcode v3.1) (그 라인이 활성화되었을 때만) 거대한 누출을 발견했지만 ... 그것은 CVObject가 496 B를 가지고 있다고 말했습니다. CVObject, EventType = malloc, size = 496, ResponsibleLibrary = CoreVideo, ResponsiblCaller = CVObject :: alloc (.., long, ..const)이 코드에는 CVObject가 포함되어 있지 않습니다. , .. 긴, 긴) ..... 감사합니다 ..... ..... – ravyr
496 바이트는 "거대한 누출"이 아닙니다. net 객체 수로 목록을 정렬 한 다음 Cocoa 나 Core Foundation이 아닌 클래스를 찾으십시오. –
답변 해 주셔서 감사합니다. 그것은 나에게 많은 도움이되었습니다. 올바른 도구를 사용하여 마침내 올바른 방향으로 검색하기 시작했습니다 ... # 496B를 "거대한 누출"이라고 오인 한 것처럼 #net은 누출을 표시하지 않았습니다 ... 그러나 다른 악기 관찰 실행 중이고, 나는 "GeneralBlock-618496"이 상대적으로 작은 # net 수를 보였지만 거대한 NetBytes는 - 1 분이 지나면 500MB가 넘는 것으로 나타났습니다. CVPixelBufferBacking :: initWithPixelBufferDescription (...) 그래서 지금 내가 잃어버린 것을 알았고 지금은 다시 궤도에 진입했다고 가정합니다 .- – ravyr