2009-11-10 11 views

Respuesta

17

La razón por la que no se usa el montón es para cumplir con los estándares (POSIX) y otros sistemas. La interfaz simplemente no es tal que se supone que debe liberar el búfer devuelto. Supone almacenamiento estático.

Pero al declararlo como subproceso local (con __thread), dos subprocesos no entran en conflicto entre sí si ambos llaman a la función. Esta es la solución alternativa de glibc para el quebrantamiento de la interfaz.

Es cierto que esto no es reentrante o en consonancia con el espíritu de ese término. Si tiene una función recursiva que lo llama, no puede confiar en que el búfer sea el mismo entre las llamadas. Pero puede ser utilizado por múltiples hilos, que a menudo es lo suficientemente bueno.

EDIT: Por cierto, acabo de recordar, hay una versión más nueva de esta función que utiliza un búfer proporcionado por el que llama. Ver inet_ntop().

+0

@asveikau: Perdón por el error de impresión. – Jichao

+0

@asveikau: En conclusión, ¿es compatible? – Jichao

+0

@jcyang Sí, es por compatibilidad. – asveikau

Cuestiones relacionadas