[過去ログ] GCは失敗。メモリは自分で管理せよ! その2©2ch.net (720レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
659: デフォルトの名無しさん [] 2017/09/17(日) 13:06:26.21 ID:S40DCpdn(1/20) AAS
いくら64bitあっても設計が雑ならメモリ枯渇するでしょ
ページング方式でメモリ消費されてんだし
661: デフォルトの名無しさん [] 2017/09/17(日) 13:32:07.34 ID:S40DCpdn(2/20) AAS
1回のメモリ取得で4kづつ消費されるわけか
662: デフォルトの名無しさん [] 2017/09/17(日) 13:49:19.58 ID:S40DCpdn(3/20) AAS
ツリー状のメモリ管理するとあっという間にメモリ無くなるな
class CTree{
std::vector<CTree>;
};
とか
663: デフォルトの名無しさん [] 2017/09/17(日) 14:00:55.72 ID:S40DCpdn(4/20) AAS
こうするとさらにメモリが消えていくな
class CTree{
std::map<std::string,CTree>;
};
664: デフォルトの名無しさん [] 2017/09/17(日) 14:12:30.87 ID:S40DCpdn(5/20) AAS
間違えた。

class CTree{
std::vector<CTree> m_Tree;
};

class CTree{
std::map<std::string,CTree>m_Tree;
};

で、ツリーのノード一つ毎に上は4kづつ下は8kづつメモリを消費するわけで・・・
666: デフォルトの名無しさん [] 2017/09/17(日) 15:38:01.00 ID:S40DCpdn(6/20) AAS
外部リンク:ja.wikipedia.org動的メモリ確保
>また、粒度の細かいページングは、ページングテーブル
>(物理アドレスと論理アドレスの対応表)が大きくなるため、
>4KB程度の大きなブロック単位でしか割り当てることができない。

ウィキペディア見るとそのアフォな実装がまかり通ってると読めるんだが・・・
668: デフォルトの名無しさん [] 2017/09/17(日) 16:00:06.71 ID:S40DCpdn(7/20) AAS
こっちも参考になる
外部リンク:ja.wikipedia.org
CPUによってMMUの実装が異なる点は面倒だな
669: デフォルトの名無しさん [] 2017/09/17(日) 16:06:24.06 ID:S40DCpdn(8/20) AAS
>>667
667(1): デフォルトの名無しさん [sage] 2017/09/17(日) 15:48:55.35 ID:iyMogwhx(2/5) AAS
アホだなぁ
OSレベルのメモリ確保と言語レベルのnew、mallocは別
ちゃんとmallocやnew時のアドレス確認はしたか??かなりアフォな動作してるぞ?
まあ、多少のrealloc程度の処理なら何とかしてくれるけどな。
672: デフォルトの名無しさん [] 2017/09/17(日) 16:17:49.54 ID:S40DCpdn(9/20) AAS
MMUは多少以上の処理をすると簡単にフォールト返すのが困りもの
結局初心者レベルのプログラマしか想定してないんだよな
673: デフォルトの名無しさん [] 2017/09/17(日) 16:30:36.71 ID:S40DCpdn(10/20) AAS
>>671
671(1): デフォルトの名無しさん [sage] 2017/09/17(日) 16:17:08.43 ID:iyMogwhx(4/5) AAS
VC++2015での実行結果

auto a = malloc( 10 );
auto b = malloc( 10 );
wchar_t tmp[ 100 ];
::swprintf_s( tmp, 100, L"a = %x, b = %x \n", a, b );
::OutputDebugString( tmp );

----------------------------------------

a = 10a4f0, b = 10a508

残念でしたね
realloc使った事ある?
675: デフォルトの名無しさん [] 2017/09/17(日) 16:37:39.46 ID:S40DCpdn(11/20) AAS
複雑なことをしていると、それがまるで正しいかのように思う点がアフォ
多少複雑なことをしていてもアフォな挙動をする可能性はあると考えるべき
676: デフォルトの名無しさん [] 2017/09/17(日) 17:05:23.31 ID:S40DCpdn(12/20) AAS
malloc,newの挙動の説明ってまんまMMUの説明なんだよな
だから複雑なアルゴリズムを使われていると思うのはMMUが複雑な挙動をしているから
でも、そんなに複雑な挙動してるか??
単に過去のアプリとの互換性の問題で変な事をしているだけだぞ
677: デフォルトの名無しさん [] 2017/09/17(日) 17:16:19.17 ID:S40DCpdn(13/20) AAS
たいがいのmalloc,newはMMU次第でいくらでも挙動が変化するからな
ちゃんとPC毎に動作確認したか??
679: デフォルトの名無しさん [] 2017/09/17(日) 17:55:14.06 ID:S40DCpdn(14/20) AAS
malloc,newの挙動はハードとOSによって変化するという記述は見たことあるけどな
680: デフォルトの名無しさん [] 2017/09/17(日) 18:02:58.95 ID:S40DCpdn(15/20) AAS
ごめん、ハードとソフトウェアだった
682
(1): デフォルトの名無しさん [] 2017/09/17(日) 21:59:59.26 ID:S40DCpdn(16/20) AAS
自分はメモリ対策プログラムを作って対応したけどな。
メモリサイズを三種類用意して、メモリに対するガードの確実な作りにした。
現在のサイズに使われてるサイズにリミットサイズの三種類のサイズな。
外に出てくるサイズは現在のサイズ、
使われてるサイズはメモリを増やした場合の最大取得サイズで、事実上の取得サイズ、
リミットサイズは取得できるメモリの上限。
で、これらを組み合わせてスーパークラスを作って基本的に対応させてる。
683: デフォルトの名無しさん [] 2017/09/17(日) 22:08:00.63 ID:S40DCpdn(17/20) AAS
メモリの増減には現在のサイズで対応し、このサイズが必要以上に大きくなると
使われてるサイズを拡張するようにした。リミットサイズは滅多に使わないけれども、
一応対応させた。
メモリに対する読み書きは専用関数を経由して読み書きするようにしたから、
素人が使っても安全なぐらいのプログラムになってる。
684: デフォルトの名無しさん [] 2017/09/17(日) 22:27:01.93 ID:S40DCpdn(18/20) AAS
あと、動的配列ってのを作って、複数のメモリ取得に対応させた。
メモリにヘッダとフッタを用意して、フッタには複数配列のデータに対応させ、
ヘッダには配列数とメモリサイズを入れてる。フッタには>>682のデータを持たせた。
ある意味では拡張コンパクションみたいなモノになった。
685: デフォルトの名無しさん [] 2017/09/17(日) 22:33:12.53 ID:S40DCpdn(19/20) AAS
で、アローケートが一回だけになるようにして、あとはリアロークで対応させた。
おかげでメモリの消費効率は異常なまでに効率よく使えるようになったよ。
あと、動的配列使う場合はいったんメモリをフォーマットするようにしたけどね。
686: デフォルトの名無しさん [] 2017/09/17(日) 23:21:53.67 ID:S40DCpdn(20/20) AAS
それから、動的配列は入れ子構造にすれば色々と応用がきくようになってるけどな。
で、追記式みたいにデータが動くツリー構造とかが使えるようになってる。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s