フラグメンテーション ..
[2ch|▼Menu]
2:デフォルトの名無しさん
22/05/23 09:16:06.16 fHDd3cja.net
多分、最近のプログラムの高級言語なら大概発生するバグです。
ガーベージコレクションとかコンパクションとか色々と対策はあり得ますが、
決定打に欠ける点は否めません。むしろ、プログラマ側が対策を取った方が
効率が良いと思われます。

3:デフォルトの名無しさん
22/05/23 09:28:24.72 fHDd3cja.net
プログラムやOSの仕様だと言ってしまえれば楽なんだけどな

4:デフォルトの名無しさん
22/05/23 09:30:35.48 fHDd3cja.net
ちなみにPC産業は、メモリーを増やすことで無理矢理乗り切る事を決めてるようです

5:デフォルトの名無しさん
22/05/23 09:33:32.48 fHDd3cja.net
マイクロコントローラだとメモリーに限界があるんだよな

6:デフォルトの名無しさん
22/05/23 09:35:49.63 fHDd3cja.net
メモリーの小さいPCでExcel使うと、よくこれで落ちるっぽいんだよな

7:デフォルトの名無しさん
22/05/23 09:37:45.77 fHDd3cja.net
MacのObject-Cだっけ?言語仕様でどうにかしてるのは

8:デフォルトの名無しさん
22/05/23 09:40:21.51 fHDd3cja.net
Mac信者が昔、そこそこ強かったのはその辺りが原因だよな
スマホの普及でなりを潜めたが

9:デフォルトの名無しさん
22/05/23 09:42:28.55 fHDd3cja.net
Macでも落ちるときは落ちる
調子に乗ってGUIに動画を使って爆弾マークを殖やした時期があったな

10:デフォルトの名無しさん
22/05/23 09:43:51.48 fHDd3cja.net
スマホもPCのノリで調子に乗って遊んでると落ちるよな

11:デフォルトの名無しさん
22/05/23 09:46:58.56 fHDd3cja.net
malloc全面禁止が出来れば楽なんだがな
フラグメンテーションが起きようも無くなる
まあ、簡単な話ではないけどな
最初にmallocした領域を最後まで使い続ける手もあるな
途中でreallocを使わなければ、どうって事もない話だ
要は、メモリーに隙間を空けなければ良いだけだしな
同じメモリーを余裕を持って取得し、最後まで使い回す
どのぐらいの余裕が必要かは考えれば出てくると思われる
例えば、TCP/IPのパケットの場合は、64kが最大だから、
このサイズでメモリーを取得して使い回せば良い
取得したメモリー領域をいちいち全部解放する方法もあるよな
これなら隙間の空きようも無い
ただ、メモリーの取得方法や環境によっては、
取得した順番とは真逆に解放する必要があるケースがあり得るから注意する事

12:デフォルトの名無しさん
22/05/23 09:47:42.48 fHDd3cja.net
STLも調子に乗って使うと危険な事があるよな

13:デフォルトの名無しさん
22/05/23 09:50:30.77 fHDd3cja.net
>取得したメモリー領域をいちいち全部解放する方法もあるよな
>これなら隙間の空きようも無い
これが実は一番のくせ者でな、ライブラリとかの都合で解放しきれないケースがある
で、広大な虫食い現象の発生原因になるとか

14:デフォルトの名無しさん
22/05/23 09:56:05.64 fHDd3cja.net
>>13
部分的にちょこっとメモリーを取得するとかが怖いよな
ユーザーにとっては便利なんだろうがプログラマにとっては厄介この上ない処理になる

15:デフォルトの名無しさん
22/05/23 09:59:00.65 fHDd3cja.net
プロフィールとか住所録は怖いね
電話番号を複数並べるとかの処理がこうなってる可能性はあり得る

16:デフォルトの名無しさん
22/05/23 10:13:43.44 fHDd3cja.net
>>13-15
構造体やクラス構造の基底クラスで部分的なポインタの使用禁止すれば、基本的には何とかなる

17:デフォルトの名無しさん
22/05/23 10:16:54.78 fHDd3cja.net
>>16
最近の言語仕様だとこれが防げないんだよな、怖い怖い
ガーベージコレクションが乗ってる言語で言語仕様を知らない人間が作ってるから

18:デフォルトの名無しさん
22/05/23 15:58:08 2I4BsGir.net
>>11
> 最初にmallocした領域を最後まで使い続ける

これしかないのでは

19:デフォルトの名無しさん
22/05/24 00:30:30 AfIH44Sa.net
昔と違って、すべてのデータを起動時に読み込んだり、
すべてのデータをリソースに放り込んだりが当たり前なんだよな、今は。
起動時に読み込まないのはセーブデータだけ。ゲームならこれで十分。
時代は変わったな。

20:デフォルトの名無しさん
22/05/24 01:11:11 AfIH44Sa.net
HDDの一瞬のアクセスで終わるしな
フロッピー時代の人達はどうやってメモリーを管理してたんだ?
少ないメモリーであれだけの事をやっていてよく落ちないよな

21:デフォルトの名無しさん
22/05/26 04:37:08.87 5/Uhy433.net
昔はメモリ領域の隅々までメモリマップで管理して、いつどこでどう使うかを決めてたんだよ
毎回コールドスタートで、常駐プログラムも全て素性のしれたものしか動かさないような環境だからこそできたわけだけど

22:デフォルトの名無しさん
22/05/27 11:28:28.43 S0cy91Tb.net
CP/M の overlay か

23:デフォルトの名無しさん
22/05/27 12:47:22.12 tzFUQxnX.net
質問
今どきのCPUなら仮想記憶があるから、メモリが連続してなくてもいいと思うんだけど、どう?

24:デフォルトの名無しさん
22/05/27 17:32:07.10 IBVx4FIE.net
仮想記憶って、ページングで容量増やすだけじゃね?

25:デフォルトの名無しさん
22/05/27 17:33:51.89 IBVx4FIE.net
しかも、スワップファイルして容量増やす代わりに速度遅くなるし

26:デフォルトの名無しさん
22/05/27 17:40:47.79 IBVx4FIE.net
容量増やしてフラグメンテーションを抑制してるだけの話だな

27:デフォルトの名無しさん
22/05/28 13:01:52.10 iLlMOWtZ.net
ノードツリーみたいなデータ型のものを扱うと仕方なさそうな
高層マンションみたいに初めから大量に枠を確保しておいて、空き部屋ができたら使う方式が現実解かな?

28:デフォルトの名無しさん
22/05/28 13:13:14.67 k/Sv/d4l.net
forで何回も回すスコープの中の変数ってフラグメンテーションの原因になるの?
例えば
nを1から100まで増やして
対応する番号の数値呼び出して
変数A = f(n)として100回処理した場合
変数Aは1フレームで100回別の場所に書き換えされるの?

29:デフォルトの名無しさん
22/05/28 14:17:44.57 R0+ouirM.net
最速でフラグメンテーション起こすプログラムとかある?

30:デフォルトの名無しさん
22/05/28 22:19:33.23 zgRSxl27.net
>>28
メモリー使ってればね。っていうかメモリー使わないんでは?
>>29
これなんかどうだ?
vector<vector<int>> vec;

31:デフォルトの名無しさん
22/05/28 22:23:46.10 zgRSxl27.net
>>29
あっそっか、大量にメモリの取得解放を別々のモジュールで行えば良いんだ。
で、その間に嫌がらせみたいに小さなメモリー取得をする処理をどっちにも入れる

32:デフォルトの名無しさん
22/05/29 12:08:45.89 au8Lw3/M.net
IEやfirefoxやChromeを沢山起動させろ

33:デフォルトの名無しさん
22/05/29 13:18:08.42 azJHOMIC.net
それってもうウイルスだね


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

453日前に更新/7752 Bytes
担当:undef