Frage

auf dem Quellcode des GNU C Library Glancing, fand ich die inet_ntoa ist implementated mit

static __thread char buffer[18]

Meine Frage ist, da es notwendig ist reeentrant inet_ntoa zu verwenden, warum das GNU C Library nicht an den Autor zu tun verwenden malloc es implementate?

Dank.

War es hilfreich?

Lösung

Der Grund, es ist nicht die Heap verwendet, ist mit Standards (POSIX) und anderen Systemen anzupassen. Die Schnittstelle ist einfach nicht so, dass man die Puffer zurück befreien soll. Er geht davon aus statischen Speicher ..

Aber, indem es als lokaler Thread (mit __thread) erklärt, zwei Fäden miteinander nicht in Konflikt geraten, wenn sie beide passieren die Funktion anrufen. Dies ist glibc die Abhilfe für die Gebrochen der Schnittstelle.

Es ist wahr, dass dies nicht einspringenden oder im Einklang mit dem Geist dieses Begriffs. Wenn Sie eine rekursive Funktion, die es erfordert, können Sie nicht auf den Puffer verlassen, um die gleiche zwischen den Anrufen zu sein. Aber es kann von mehreren Threads verwendet werden, die oft gut genug sind.

EDIT: By the way, ich gerade daran erinnert, gibt es eine neuere Version dieser Funktion, die einen Anrufer bereitgestellte Puffer verwendet. Siehe inet_ntop() .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top