- 1 名前:デフォルトの名無しさん [2022/05/23(月) 09:13:47 ID:fHDd3cja.net]
- ・フラグメンテーション
メモリーの配置がどんどん虫食い状態になって空き領域が減っていく、 プログラムを組む上では怖いバグです。ネットワークやファイル、DB などとのデータのやり取りが増えれば増えるほど発生して、 メモリーを圧迫し、最後には発生原因不明のメモリーエラーを発生させる、 プログラマにとっては非常に怖いバグです。 そんなフラグメンテーションの対策を行うためのスレッドです。
- 2 名前:デフォルトの名無しさん [2022/05/23(月) 09:16:06.16 ID:fHDd3cja.net]
- 多分、最近のプログラムの高級言語なら大概発生するバグです。
ガーベージコレクションとかコンパクションとか色々と対策はあり得ますが、 決定打に欠ける点は否めません。むしろ、プログラマ側が対策を取った方が 効率が良いと思われます。
- 3 名前:デフォルトの名無しさん [2022/05/23(月) 09:28:24.72 ID:fHDd3cja.net]
- プログラムやOSの仕様だと言ってしまえれば楽なんだけどな
- 4 名前:デフォルトの名無しさん [2022/05/23(月) 09:30:35.48 ID:fHDd3cja.net]
- ちなみにPC産業は、メモリーを増やすことで無理矢理乗り切る事を決めてるようです
- 5 名前:デフォルトの名無しさん [2022/05/23(月) 09:33:32.48 ID:fHDd3cja.net]
- マイクロコントローラだとメモリーに限界があるんだよな
- 6 名前:デフォルトの名無しさん [2022/05/23(月) 09:35:49.63 ID:fHDd3cja.net]
- メモリーの小さいPCでExcel使うと、よくこれで落ちるっぽいんだよな
- 7 名前:デフォルトの名無しさん [2022/05/23(月) 09:37:45.77 ID:fHDd3cja.net]
- MacのObject-Cだっけ?言語仕様でどうにかしてるのは
- 8 名前:デフォルトの名無しさん [2022/05/23(月) 09:40:21.51 ID:fHDd3cja.net]
- Mac信者が昔、そこそこ強かったのはその辺りが原因だよな
スマホの普及でなりを潜めたが
- 9 名前:デフォルトの名無しさん [2022/05/23(月) 09:42:28.55 ID:fHDd3cja.net]
- Macでも落ちるときは落ちる
調子に乗ってGUIに動画を使って爆弾マークを殖やした時期があったな
- 10 名前:デフォルトの名無しさん [2022/05/23(月) 09:43:51.48 ID:fHDd3cja.net]
- スマホもPCのノリで調子に乗って遊んでると落ちるよな
- 11 名前:デフォルトの名無しさん [2022/05/23(月) 09:46:58.56 ID:fHDd3cja.net]
- malloc全面禁止が出来れば楽なんだがな
フラグメンテーションが起きようも無くなる まあ、簡単な話ではないけどな 最初にmallocした領域を最後まで使い続ける手もあるな 途中でreallocを使わなければ、どうって事もない話だ 要は、メモリーに隙間を空けなければ良いだけだしな 同じメモリーを余裕を持って取得し、最後まで使い回す どのぐらいの余裕が必要かは考えれば出てくると思われる 例えば、TCP/IPのパケットの場合は、64kが最大だから、 このサイズでメモリーを取得して使い回せば良い 取得したメモリー領域をいちいち全部解放する方法もあるよな これなら隙間の空きようも無い ただ、メモリーの取得方法や環境によっては、 取得した順番とは真逆に解放する必要があるケースがあり得るから注意する事
- 12 名前:デフォルトの名無しさん [2022/05/23(月) 09:47:42.48 ID:fHDd3cja.net]
- STLも調子に乗って使うと危険な事があるよな
- 13 名前:デフォルトの名無しさん [2022/05/23(月) 09:50:30.77 ID:fHDd3cja.net]
- >取得したメモリー領域をいちいち全部解放する方法もあるよな
>これなら隙間の空きようも無い これが実は一番のくせ者でな、ライブラリとかの都合で解放しきれないケースがある で、広大な虫食い現象の発生原因になるとか
- 14 名前:デフォルトの名無しさん [2022/05/23(月) 09:56:05.64 ID:fHDd3cja.net]
- >>13
部分的にちょこっとメモリーを取得するとかが怖いよな ユーザーにとっては便利なんだろうがプログラマにとっては厄介この上ない処理になる
- 15 名前:デフォルトの名無しさん [2022/05/23(月) 09:59:00.65 ID:fHDd3cja.net]
- プロフィールとか住所録は怖いね
電話番号を複数並べるとかの処理がこうなってる可能性はあり得る
- 16 名前:デフォルトの名無しさん [2022/05/23(月) 10:13:43.44 ID:fHDd3cja.net]
- >>13-15
構造体やクラス構造の基底クラスで部分的なポインタの使用禁止すれば、基本的には何とかなる
- 17 名前:デフォルトの名無しさん [2022/05/23(月) 10:16:54.78 ID:fHDd3cja.net]
- >>16
最近の言語仕様だとこれが防げないんだよな、怖い怖い ガーベージコレクションが乗ってる言語で言語仕様を知らない人間が作ってるから
- 18 名前:デフォルトの名無しさん mailto:sage [2022/05/23(月) 15:58:08 ID:2I4BsGir.net]
- >>11
> 最初にmallocした領域を最後まで使い続ける これしかないのでは
- 19 名前:デフォルトの名無しさん [2022/05/24(火) 00:30:30 ID:AfIH44Sa.net]
- 昔と違って、すべてのデータを起動時に読み込んだり、
すべてのデータをリソースに放り込んだりが当たり前なんだよな、今は。 起動時に読み込まないのはセーブデータだけ。ゲームならこれで十分。 時代は変わったな。
- 20 名前:デフォルトの名無しさん [2022/05/24(火) 01:11:11 ID:AfIH44Sa.net]
- HDDの一瞬のアクセスで終わるしな
フロッピー時代の人達はどうやってメモリーを管理してたんだ? 少ないメモリーであれだけの事をやっていてよく落ちないよな
- 21 名前:デフォルトの名無しさん mailto:sage [2022/05/26(木) 04:37:08.87 ID:5/Uhy433.net]
- 昔はメモリ領域の隅々までメモリマップで管理して、いつどこでどう使うかを決めてたんだよ
毎回コールドスタートで、常駐プログラムも全て素性のしれたものしか動かさないような環境だからこそできたわけだけど
- 22 名前:デフォルトの名無しさん [2022/05/27(金) 11:28:28.43 ID:S0cy91Tb.net]
- CP/M の overlay か
- 23 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 12:47:22.12 ID:tzFUQxnX.net]
- 質問
今どきのCPUなら仮想記憶があるから、メモリが連続してなくてもいいと思うんだけど、どう?
- 24 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 17:32:07.10 ID:IBVx4FIE.net]
- 仮想記憶って、ページングで容量増やすだけじゃね?
- 25 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 17:33:51.89 ID:IBVx4FIE.net]
- しかも、スワップファイルして容量増やす代わりに速度遅くなるし
- 26 名前:デフォルトの名無しさん mailto:sage [2022/05/27(金) 17:40:47.79 ID:IBVx4FIE.net]
- 容量増やしてフラグメンテーションを抑制してるだけの話だな
- 27 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 13:01:52.10 ID:iLlMOWtZ.net]
- ノードツリーみたいなデータ型のものを扱うと仕方なさそうな
高層マンションみたいに初めから大量に枠を確保しておいて、空き部屋ができたら使う方式が現実解かな?
- 28 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 13:13:14.67 ID:k/Sv/d4l.net]
- forで何回も回すスコープの中の変数ってフラグメンテーションの原因になるの?
例えば nを1から100まで増やして 対応する番号の数値呼び出して 変数A = f(n)として100回処理した場合 変数Aは1フレームで100回別の場所に書き換えされるの?
- 29 名前:デフォルトの名無しさん mailto:sage [2022/05/28(土) 14:17:44.57 ID:R0+ouirM.net]
- 最速でフラグメンテーション起こすプログラムとかある?
- 30 名前:デフォルトの名無しさん [2022/05/28(土) 22:19:33.23 ID:zgRSxl27.net]
- >>28
メモリー使ってればね。っていうかメモリー使わないんでは? >>29 これなんかどうだ? vector<vector<int>> vec;
- 31 名前:デフォルトの名無しさん [2022/05/28(土) 22:23:46.10 ID:zgRSxl27.net]
- >>29
あっそっか、大量にメモリの取得解放を別々のモジュールで行えば良いんだ。 で、その間に嫌がらせみたいに小さなメモリー取得をする処理をどっちにも入れる
- 32 名前:デフォルトの名無しさん [2022/05/29(日) 12:08:45.89 ID:au8Lw3/M.net]
- IEやfirefoxやChromeを沢山起動させろ
- 33 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 13:18:08.42 ID:azJHOMIC.net]
- それってもうウイルスだね
|
|