gpt4 book ai didi

sockets - 为什么 inet_ntoa 被设计为不可重入函数?

转载 作者:行者123 更新时间:2023-12-04 10:02:28 25 4
gpt4 key购买 nike

浏览 GNU C 库的源代码,我发现 inet_ntoa 是用

static __thread char buffer[18]

我的问题是,既然需要使用可重入的inet_ntoa,为什么GNU C库的作者不使用malloc来实现呢?

谢谢。

最佳答案

它不使用堆的原因是为了符合标准(POSIX)和其他系统。该接口(interface)不是这样的,您应该释放返回的缓冲区。它假定静态存储..

但是通过将其声明为线程本地(使用 __thread ),如果两个线程碰巧都在调用该函数,则它们不会相互冲突。这是 glibc 针对接口(interface)损坏的解决方法。

确实,这不是可重入的,也不符合该术语的精神。如果您有调用它的递归函数,则不能依赖调用之间的缓冲区相同。但它可以被多个线程使用,这通常已经足够了。

编辑:顺便说一句,我只记得,这个函数有一个更新版本,它使用调用者提供的缓冲区。见 inet_ntop() .

关于sockets - 为什么 inet_ntoa 被设计为不可重入函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com