4

atexitライブラリなどの大規模なプロジェクトでの使用に固有の危険性はありますか?

atexitもしそうなら、大規模なプロジェクトで問題を引き起こす可能性がある背後にある技術的な性質についてはどうですか?

4

2 に答える 2

6

atexitライブラリでの使用を避ける主な理由は、その使用にはグローバルな状態が含まれるからです。優れたライブラリは、グローバルな状態を避ける必要があります。

ただし、他の技術的な理由もあります。

  1. 実装は、少数 (32 だと思います) のatexitハンドラーをサポートするためにのみ必要です。その後、すべての呼び出しがatexit失敗するか、リソースの可用性に応じて成功または失敗する可能性があります。したがって、ハンドラーを登録できない場合にどうするかを検討する必要がありatexit、続行する良い方法がない可能性があります。

  2. atexitライブラリを動的にロードする他のメソッドとの相互作用はdlopen定義されていません。ハンドラーを登録したライブラリーatexitは安全にアンロードできず、実装によってこの状況に対処する方法が異なる場合があります。

  3. 適切に記述されatexitていないハンドラーは、プログラムが適切に終了するのを妨げる、相互に作用したり、不適切な動作をしたりする可能性があります。たとえば、atexitハンドラーが別のスレッドに保持されていて、呼び出し時の状態のために解放できないロックを取得しようとした場合exit

于 2013-06-27T19:10:51.503 に答える
1

atexitSecure CERT には、正しく使用されていない場合に関するエントリがあります。

ENV32-C。すべての atexit ハンドラは正常に戻る必要があります

https://www.securecoding.cert.org/confluence/display/seccode/ENV32-C.+All+atexit+handlers+must+return+normally

于 2013-06-27T18:15:27.077 に答える