2009-09-25 2 views
0

NSThread를 분리하면 Cocoa가 별도의 메모리 힙 또는 메모리 영역에서 실행됩니까? 예를 들어 스레드를 분리하려면 malloc을 사용하여 큰 버퍼를 만든 다음 스레드를 종료 시키십시오. 그런 메모리를 자동 스레드 정리로 다시 가져 오거나 누출 될 수 있습니까?NSThread에 별도의 힙이 있습니까? (iPhone에서) pthread는 어떨까요?

대신에 POSIX 스레드 (pthread)를 사용하면 어떨까요?

ObjC allocs 또는 autorelease pools에 관심이 없습니다. 저수준 버퍼에 대해 이야기하고 있습니다. int * foo = malloc (100000);

답변

6

pthread와 같은 NSThread는 별도의 스택을 갖지만 작업의 나머지 스레드와 동일한 힙을 공유합니다. 스레드 & 개별 작업의 힙이 격리됩니다.

당신이 묘사 한 패턴 - 쓰레드에서 alloc, 쓰레드가 빠져 나갈 수 있음 -은 유출됩니다; 메모리가 복구되지 않습니다.

어떤 종류의 스레드를 사용하든 상관 없습니다.

크기 할당이 매우 제한된 경우 스레드가 종료 될 때 수확 될 스택 버퍼를 사용할 수 있습니다. 그러나 스레드의 스택 크기는 제한되어 있으므로 대량의 스택 할당을 사용하는 경우 스택을 날려 버리거나 전체 응용 프로그램이 손상 될 수 있습니다.

완료되면 malloc() 및 free()를 사용하십시오.