3

私はLinuxを実行していますが、ライブラリの終了関数などを実行して「クリーンアップ」されていないライブラリのコードに対して、プロセス終了後に実際に何が起こるのか疑問に思っています。出口関数に特定のクリーンアップを実装する人もいれば、実行しない人もいます。

4

2 に答える 2

4

それはあなたが期待するクリーンアップに依存します。ライブラリが開いていたすべてのローカルOSリソース(メモリ、開いているファイル/ソケットなど)が閉じられ、解放されます。これは、関連するクリーンアップ関数(free / delete、fclose / closeなど)を呼び出さなくても発生します。

ただし、OS以外のリソース(サーバーで開始されたトランザクションなど)は自動クリーニングされません。これは、OSがこの状況で何をすべきかを知ることができないために発生します。適切に作成されたサーバーは、これらのケースを適切に処理します。

また、プログラムが正常に終了した場合、ライブラリは特定のクリーンアップ関数を「非表示」にすることができます。

于 2013-01-07T07:08:52.870 に答える
2

場合によります...

...リソースタイプについて。

ベストプラクティス

ファイル記述子を解放します。(ただし、OSそれらを閉じます。)

バッファリングされたファイルとデータベース接続を閉じます。(ただし、標準の出力バッファーは、exit(3)またはmain()からの戻り時にフラッシュされます。

ただし、終了直前に割り当てられたメモリを解放しないでください。これは時間の大きな無駄であり、決して使用されないページを読み返す結果になる可能性があります。

于 2013-02-09T20:10:07.587 に答える