2009-11-10 8 views

Odpowiedz

17

Powodem, dla którego nie używa się sterty, jest zgodność ze standardami (POSIX) i innymi systemami. Interfejs nie jest taki, że powinieneś zwolnić bufor. Zakłada statyczne przechowywanie ..

Ale przez zadeklarowanie go jako wątku lokalnego (z __thread), dwa wątki nie kolidują ze sobą, jeśli zdarzy się, że oba wywołują tę funkcję. Jest to obejście glibc dla złamania interfejsu.

To prawda, że ​​nie jest to powtórnie zgłoszony ani zgodny z duchem tego terminu. Jeśli masz funkcję rekursywną, która go wywołuje, nie możesz polegać na tym, że bufor jest taki sam między połączeniami. Ale może być używany przez wiele wątków, co często jest wystarczająco dobre.

EDIT: Przy okazji, właśnie przypomniałem, istnieje nowsza wersja tej funkcji, która używa bufora dostarczonego przez wywołującego. Zobacz inet_ntop().

+0

@asveikau: Przepraszamy za błąd drukowania. – Jichao

+0

@asveikau: Podsumowując, jego zgodności? – Jichao

+0

@jcyang Tak, to dla kompatybilności. – asveikau

Powiązane problemy