首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gethostbyname和gethostbyname地址-结构在内存中的位置

gethostbyname和gethostbyname地址-结构在内存中的位置
EN

Stack Overflow用户
提问于 2015-11-29 19:27:23
回答 2查看 148关注 0票数 2

这两个函数都返回一个struct hostent *。我想知道的是结构究竟是在哪里创建/存储在内存中的?

我猜它必须在堆上,但是手册页没有警告我们释放返回的指针。

它不能在堆栈上,否则当函数返回的地址不再有效时.

我是不是漏掉了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-29 19:39:05

首先,这两个函数都被认为是过时的,应该由getaddrinfo & getnameinfo代替。

至于内存,它应该被认为是不应该释放的临时静态数据。规范本身并没有声明应该如何实现。

视窗

gethostbyname函数返回的主机结构的内存由来自线程本地存储的Winsock DLL内部分配。

在Linux中(来自这个手册):

gethostbyname()和gethostbyaddr()函数可能返回指向静态数据的指针,这些数据可能会被以后的调用覆盖。复制struct是不够的,因为它包含指针;需要一个深拷贝。

票数 2
EN

Stack Overflow用户

发布于 2015-11-29 19:32:48

在Windows中,它存储在线程退出时自动回收的每线程数据中。这使得多个线程能够调用API,而无需互踩。当然,任何单独的线程都不能期望跨调用维护hostent

我不知道它在类似Unix的环境中是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33987033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档