2009-11-06 5 views
5

pthread_create()으로 새 스레드를 시작한 다음 pthread_detach()을 사용하여 분리했다고 가정 해 봅시다. 자, 부터까지 스레드 컨텍스트에서 malloc()을 사용하여 메모리를 할당했습니다.pthread 릴리스에서 메모리를 해제 했습니까?

스레드가 종료되면 malloc'ed 메모리가 자동으로 해제됩니까?

답변

8
  • 스레드는 메모리 자원 (적어도 POSIX)을 공유합니다.
  • malloc()/realloc()/free() 메모리 관리는 스레드 (적어도 지금까지는)을 인식하지 못합니다.
  • 그래서 malloc()의 결과를 간단한 'resource'로 처리해야합니다. 스레드와 링크되어 있지 않습니다.
  • 이제 할당 된 메모리는 스레드에 연결되지 않으므로 스레드 종료시 free()가 아닙니다. 물론 특수 취급 인 메커니즘을 제공 할 수는 있지만 자동으로 수행되지는 않습니다.

    좋은 점은 스레드간에 메모리 할당을 전달할 수 있다는 것입니다. 즉, 하나의 스레드에서 이러한 자원을 할당 한 다음 다른 스레드에서 할당 할 수 있습니다 (좋은 점이 아닌지).

    희망이 유용한 설명이 될 것입니다, 할당 된 메모리 포인터를 모든 프로세스 수준의 디스크립터에 대해 생각하십시오.

    1

    나는 그다지 확신 할 수 없다. free()를 사용해야한다.

    4

    No-malloc'ed 메모리는 명시 적 'free'로만 해제됩니다.

    +2

    일반적인 데스크탑/서버 OS에서 적어도 모든 프로세스가 종료 될 때. – nos

    +0

    일반화하지 마십시오. 프로그램이 종료되면 해제됩니다. 그리고 그 이후로는 .. – TimZaman

    1

    아니요 프로세스가 종료 될 때 malloced 메모리가 해제되는 동안 스레드가 종료 될 때도 마찬가지입니다.

    2

    스레드와 프로세스의 차이점은 프로세스가 힙 메모리 스레드와 같은 리소스를 소유하고 있다는 것입니다. 이 기능을 원하면 프로세스가 스레드가 아니길 바란다.

    관련 문제