Quitter une version de Pthread est-il une mémoire malloced?

Disons que j’ai démarré un nouveau thread avec pthread_create() , puis l’ai détaché en utilisant pthread_detach() . Maintenant, à partir du contexte du thread, j’ai alloué de la mémoire en utilisant malloc() .

Lorsque le thread se malloc'ed mémoire malloc'ed sera-t-elle libérée automatiquement?

  • Les threads partagent des ressources de mémoire (au moins POSIX).
  • La gestion de la mémoire de malloc () / realloc () / free () n’est pas réellement au courant des threads (du moins à ce jour).
  • Donc, vous devriez traiter les résultats de malloc () comme une simple “ressource”. Il n’est pas lié au thread.

Alors maintenant, la réponse devrait être évidente, toute mémoire allouée n’a aucun lien avec les threads, elle n’est donc pas free () ‘d à la fin du thread. Bien sûr, vous pouvez fournir des mécanismes de manipulation spéciaux, mais cela ne se fait pas automatiquement.

Le bon côté de ceci est que vous pouvez passer l’allocation de mémoire entre les threads, c’est-à-dire allouer une telle ressource dans un thread et ensuite la libérer d’un autre (est-ce bon pour vous ou non).

J’espère que cela pourrait être une explication utile, pensez au pointeur de mémoire alloué comme à tout descripteur de niveau processus.

La mémoire non-malloc’ed n’est jamais libérée que par un «libre» explicite.

C’est à peu près la différence entre les threads et les processus, les processus possèdent leurs ressources, contrairement aux threads de mémoire de tas. Si vous voulez cette fonctionnalité, vous voulez un processus et non un thread.

Je suis presque sûr que ce n’est pas le cas, vous devez utiliser free ().

Non. Bien que la mémoire malloced soit libérée à la fin du processus, ce n’est pas le cas lorsque le thread se ferme.