新しいものを表示

Windowsは確保したらちゃんと解放しないとメモリリークするリソースがたくさんあるよ!><;
プロセス終了すりゃそりゃ(たぶん)解放されるけど、ちゃんと不要になったら解放するように書かないとアホみたいにメモリ食う変なソフトウェアが出来るよ><;

orange さんがブースト

そもそもうまい設計してたらリソース解放なんてそうそう明示しないけど……

スレッドを表示
orange さんがブースト

「プロセスが終了するとき細々したデータ構造を free してたらそれだけでめっちゃ時間かかるので、 free しないで OS 側にまとめて開放させた」みたいな感動の実話を聞いたことがあります (具体的なことが思い出せないけど、少なくとも「なんじゃこの素人は」と思わなかったのは確か)

Windowsのプロセスどうのとかメッセージどうの、プログラミングWindows第5版を読むといいと思うよ!><;

クリーンアップしなくてもOSが何とかしてくれるはずももちろんたぶんWindowsもそうなんでしょ><; 挙動見てる限りではたぶん><
それに期待するなら通常の終了処理でもクリーンアップする処理省いたら?><;
「どうせプロセスが終了すれば開いてるファイルはおそらく安全に閉じるしあらゆるリソースの解放はきっとOSがやってくれるだろう」って><;
実際そんなコード見たら🤔ってなると思うけど><;

他の誰かって誰?><; その他の部分は自分で書いて無いの?><;
その部分は異常を検出するようには書かないの?><;

orange さんがブースト

mstdn.nere9.help/@orange_in_sp

「破綻したデータを食う前に処理を止めろ」には同意するし正しいけど、それは「破綻を発見したとき、既に他の誰かがその破綻を発生させていて、自分より前にそれを誰かが食っていない保証がない」という視点が欠けている

ちゃんと止まらないのはおかしいのは100%同意だけど、Windowsのアプリであれば異常検知後にダメもとでもそれだけ実行すべき終了処理がほぼ必ずあるし、それを即実行出来るように書いていないのであればそれ自体が危険だともいえるし、
微妙に矛盾するけど、異常検知の処理と非同期で何らかの処理が行われ続けてて、異常検知の処理と何らかの処理の順番の実行順が不定であるのであれば、それはつまり手遅れであるし、手遅れにならないようにするには、問題が起こる処理の前に異常検知する必要があるかも><
つまり、時間的に既知である異常が検出されたのであれば影響のある処理を実行する前に処理を取り止めるべきであって、不定の順番による検出に期待すべきではないし、

超短く言うと「処理実行する前に異常かどうかちゃんと確かめて異常だったらその処理は実行せず戻せ!><」かも><

orange さんがブースト

最初の文脈に戻りますが、「アプリ開発者による『これはもう駄目だ!』という表明を信用しない」というのが OS の思想であるというのならそうですねという感じだけど、その帰結が「大丈夫! 駄目だと思うから駄目なんだ! まだいけるぞ!」と死体に鞭打って破綻したプログラムを走らせ続ける凶行であるというのが、ちょっと信じられなかっただけです

そういう処理書かずに「想定外の異常に陥った! プロセスごと殺そう!」って安全策じゃなくただの手抜きじゃん><

なので、出来る限りクリティカルなものから終了処理させないといけないし、それによって停止する可能性が高い同期処理なのであれば、その処理の重要性と新たなリスクを天秤にかけて場合によっては別スレッドで実行すべきかも><(もちろん最終的にタイムアウト出来るように作るべきかも><)
そこまで出来る限りの事をした上ではじめてプロセスごと自殺させる選択肢が出るかも><

orange さんがブースト

ちなみに迂闊にファイルをフラッシュしようとすると I/O が永遠にブロックしてプロセスが終了しなくなるなどの場合が現実にあります (というかそれでつらい思いをした)

スレッドを表示

もちろん><
一か八かな状況に陥ってるんだから少なくともファイルハンドルは解放しないと><

orange さんがブースト

たとえそれがファイルシステムやデバイス側の異常に見えたとしても、ですか?

どんな異常であろうがとりあえず開いているファイルだけはとにかくなるべく閉じよう
ってしてるけど少なくともオレンジは><;

orange さんがブースト

だから「どういう “異常” なのか」次第なので、一口に「異常」と言われてもそんなのケースバイケースです

ファイル開いてる時に異常検知したらとりあえずとにかく『ファイル閉じてから』終了しない?><;
もちろん『ファイル閉じようとして閉じれなかったら諦めて次にすべき終了処理にスキップする』ってなるように><

UNIXのソフトウェアって、異常検知した時に開いてるファイルを閉じずに終了させるように書いたりするの?><;

Windowsのアプリケーションは、そういったダメもとでも実行するほうが良い終了処理がいくつも出てくるので(※1)、ちゃんと異常が起きた時になるべく必要な終了処理をよりクリティカルなものを優先して実行するように書くクセをつけましょう><
(※1 これWindowsに限らないと思うんだけど・・・><)

古いものを表示
:realtek:

思考の /dev/null