看了一下GNU C Library的源代码,我发现inet_ntoa是用.实现的
static __thread char buffer[18]
我的问题是,由于需要使用reeentrant inet_ntoa,为什么GNU C Library的作者不使用malloc来实现它呢?
谢谢.
asv*_*kau 17
它不使用堆的原因是符合标准(POSIX)和其他系统.接口不是这样你应该释放返回的缓冲区.它假设静态存储..
但是通过将它声明为本地线程(with __thread),如果它们碰巧都在调用函数,则两个线程不会相互冲突.这是glibc对于界面破碎的解决方法.
确实,这不是可重复的,也不符合该术语的精神.如果你有一个调用它的递归函数,你不能依赖于调用之间的缓冲区.但它可以被多个线程使用,这通常足够好.
编辑:顺便说一下,我记得,这个函数的新版本使用调用者提供的缓冲区.见inet_ntop().
| 归档时间: | 
 | 
| 查看次数: | 4839 次 | 
| 最近记录: |