2

epoll イベント構造体にvoid ポインターがあります。私はこれのためにメモリをmallocし、他の場所で使用しています。epoll リストから FD を削除したい場合、このポインタは自動的に解放されますか? (論理的な思考連鎖は、イベント構造が内部的に、おそらくカーネルによって維持されるということです。そのため、イベント構造とポインターに割り当てられたメモリも解放されます)または、明示的に解放する必要がありますか?

PS ポインタに割り当てられたメモリを解放しないコードを見ました。明示的に解放する必要があると思います。

4

2 に答える 2

4

いいえ、ポインターはそれ自体では解放されません。カーネルに関する限り、これは処理方法がわからない不透明な値にすぎません。それがスタック、ヒープ、データ セグメント、または他の何かへのポインターであるかどうかはわかりません。したがって、それがそうすべきであることをおそらく知ることができませんでしfree()た。

基本的なルールは、ドキュメントに特に明記されていない限り、自分freeのメモリを ing する責任があるということですmalloc。そのため、epoll リストからファイル記述子を削除するときは、編集しfreeた対応するポインターも必要ですmalloc

于 2012-05-01T05:04:23.843 に答える
2

私はこれまで使用したことがありませepollんが、解放しなければならないという非常に強力な議論はepoll_data、がユニオンであるということです。したがって、他のコードがポインターが指すものを解放できる方法はありません。

于 2012-05-01T04:59:21.847 に答える