epoll事件结构中有一个void指针。我正在为此分配内存并在其他地方使用它。现在当我想把fd从epoll列表中取出时,这个指针会自己释放吗?(逻辑思维链是事件结构在内部维护,可能由内核维护。所以它会释放事件结构和分配给指针的内存)还是我必须显式地释放它?
PS我看到一段代码没有释放分配给指针的内存。我觉得应该明确地释放它。
不,指针不会自行释放。就内核而言,它只是一个不知道如何处理的不透明值。它不知道它是指向堆栈、堆、数据段还是其他东西的指针。所以它不可能知道它应该free()
这样做。
基本规则是,除非文档明确说明,否则您有责任free
记住您的任何记忆malloc
。因此,当您从 epoll 列表中删除文件描述符时,您还需要指向您编辑free
的相应指针。malloc
我以前没有使用epoll
过,但我认为你必须释放的一个非常有力的论据是,它epoll_data
是一个联合,所以任何其他代码都无法释放指针指向的任何东西。