2009-11-06 14 views
5

Digamos que he comenzado un nuevo hilo con pthread_create() y luego lo he quitado usando pthread_detach(). Ahora, desde dentro de el contexto del hilo, asigné un poco de memoria usando malloc().¿Salir de un pthread libera la memoria mallada?

Cuando el hilo sale, ¿se liberará automáticamente la memoria malloc'ed?

Respuesta

8
  • Los hilos comparten recursos de memoria (al menos POSIX).
  • malloc()/realloc()/free() la gestión de memoria no es realmente consciente de los hilos (al menos por ahora).
  • Por lo tanto, debe tratar los resultados de malloc() como simples 'recursos'. No está vinculado a hilos.

Así que ahora respuesta debería ser obvia, cualquier memoria asignada no tiene ninguna vinculación con las discusiones de manera no es libre() 'd en la salida de rosca. Por supuesto, puede proporcionar algunos mecanismos especiales de manejo pero no se realiza automáticamente.

El lado bueno de esto es que puede pasar la asignación de memoria entre los hilos; en otras palabras, asignar dicho recurso en un hilo y luego liberarlo de otro (es bueno para usted o no).

Espero que esta sea una explicación útil, piense en el puntero de memoria asignado como en cualquier descriptor de nivel de proceso.

1

Estoy bastante seguro de que no es así, tienes que usar gratis().

4

La memoria no mallocida solo se libera por una "libre" explícita.

+2

O cuando finaliza todo el proceso, al menos en su sistema operativo de escritorio/servidor típico. – nos

+0

No generalizar. Cuando tus programas salen, se libera. Y desde que _nunca_ sucede .. – TimZaman

1

No. Si bien cualquier memoria mal colocada se libera cuando el proceso finaliza, esto no es válido para cuando el hilo sale.

2

Eso es más o menos la diferencia entre hilos y procesos, los procesos poseen sus recursos como los hilos de la memoria de montón no. Si quieres esa funcionalidad, entonces quieres un proceso, no un hilo.

Cuestiones relacionadas