C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: ページフォルトについて


(過去ログ 43 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■22681 / inTopicNo.1)  ページフォルトについて
  
□投稿者/ セイン (89回)-(2008/07/29(Tue) 17:10:32)

分類:[C/C++] 

いつもお世話になっています。
BMPファイルを読み込み処理をするアプリを作っているのですが、
以下のソースを実行すると、ページフォルトの値が、newを行うたびに
少しずつ上昇していき、処理が遅くなり、
最終的にはnewができないところまで行ってしまいます。

unsigned char* pBuffer = new unsigned char[1000000];
delete[] pBuffer;

このページフォルトの値を開放したり、
ページフォルトの値を上げないようにnewすることは可能でしょうか?
よろしくお願いします。
引用返信 編集キー/
■22687 / inTopicNo.2)  Re[1]: ページフォルトについて
□投稿者/ やじゅ (504回)-(2008/07/29(Tue) 18:28:02)
やじゅ さんの Web サイト
No22681 (セイン さん) に返信
> BMPファイルを読み込み処理をするアプリを作っているのですが、
>以下のソースを実行すると、ページフォルトの値が、newを行うたびに
>少しずつ上昇していき、処理が遅くなり、
>最終的にはnewができないところまで行ってしまいます。


答えになってないんだけども

大きい画像を一度にメモリに展開せずに、小分けでメモリに展開
していくしかないかもね。
引用返信 編集キー/
■22690 / inTopicNo.3)  Re[2]: ページフォルトについて
□投稿者/ セイン (90回)-(2008/07/29(Tue) 18:40:57)
やはりそうですか^^;
↓これを小分けでnewする方法ってあるのでしょうか?
10000ずつぐらいnewした結果をpBufferに持たすことって
可能ですか?

unsigned char* pBuffer = new unsigned char[1000000];
delete[] pBuffer;
引用返信 編集キー/
■22693 / inTopicNo.4)  Re[3]: ページフォルトについて
□投稿者/ 774RR (201回)-(2008/07/29(Tue) 19:32:12)
約1MBでしょ。 Windows 32bit 配下ではさほど巨大なバッファでもないと思うけど。
頻繁に new/delete せずにつかいまわしたらよいのではないかな、と思うが。
引用返信 編集キー/
■22694 / inTopicNo.5)  Re[3]: ページフォルトについて
□投稿者/ 2リットル (1回)-(2008/07/29(Tue) 19:47:16)
不思議ですね。
もっと詳しく知りたいので、以下の情報を提供していただけませんか?。

1)セインさんの環境について教えてください。
2)何回ぐらいでnewできなくなるのですか?
3)ページフォルトの値はどうやって確認しましたか?
4)動かなくなったときのベージフォルトの値はどれくらいでしたか?
5)メモリ使用量は安定していましたか?
引用返信 編集キー/
■22695 / inTopicNo.6)  Re[4]: ページフォルトについて
□投稿者/ なちゃ (153回)-(2008/07/29(Tue) 20:43:08)
別の所でさりげなくリークしてるやつがいたりってなことはないですかね?

引用返信 編集キー/
■22705 / inTopicNo.7)  Re[3]: ページフォルトについて
□投稿者/ やじゅ (506回)-(2008/07/30(Wed) 07:29:55)
やじゅ さんの Web サイト
No22690 (セイン さん) に返信
> やはりそうですか^^;
> ↓これを小分けでnewする方法ってあるのでしょうか?
>

1MByteでしたね、数えまちがえました(^^;
1MByteくらいなら、問題になりそうもないんですけどね。
他に原因があるかも…

引用返信 編集キー/
■22707 / inTopicNo.8)  Re[4]: ページフォルトについて
□投稿者/ セイン (91回)-(2008/07/30(Wed) 09:27:18)
◆ページフォルト確認方法
タスクマネージャの[表示]-[列の選択]列項目から「ページフォルト」
を選択して、表示するようにします。


◆ページフォルト増加確認方法
以下のコードで確認しました。

	int i = 0;
	while(1) {
		unsigned char* pBuffer = new unsigned char[5000000];
		delete[] pBuffer;
		++i;
		TRACE("%d", i);
	}

◆結果
30分ほど放置しましたが、結局newだけでは固まりませんでしたので、
別の箇所のメモリーリークかもしれません。


◆問題点
ページフォルトの値が、かなり増加するので、
それに伴う悪影響がないかの心配は常に残りますね。

引用返信 編集キー/
■22709 / inTopicNo.9)  Re[5]: ページフォルトについて
□投稿者/ 774RR (202回)-(2008/07/30(Wed) 10:00:55)
正直、なぜページフォルトの値なんぞを気にしているのか良くわからん。
ページフォルトの値は(プログラマは一般的に)気にする必要なし
客先における「推奨メモリ量」を決める際には気にする必要があるけどさ。

これは単に実行性能の目安でしかない。
ページフォルトの値が大きい=スワップが多い=遅い、というだけだから。
マシンの実装実メモリ量によって大きく変わる。増やせば単純に減るわけで。
いくら実メモリ積んでも原理的に決して0にはならないわけだしな。

むしろコミットチャージ量の増加を気にするべし (一般的なメモリリークはここに現れる)

引用返信 編集キー/
■22719 / inTopicNo.10)  Re[6]: ページフォルトについて
□投稿者/ NyaRuRu (50回)-(2008/07/30(Wed) 15:03:34)
No22709 (774RR さん) に返信
> ページフォルトの値が大きい=スワップが多い=遅い、というだけだから。

その認識は違いますよ.
Windows が表示しているページフォルトは
-ソフトページフォルト
--ゼロページフォルト
--スタンバイリストからアクティブ領域への移動
-ハードページフォルト
--ページアウトされたプライベート領域のページイン (*)
--メモリマップトファイルのページイン
という感じに多種多様なページフォルトの合算です.「スワップが多い」に関係するのは (*) の部分だけです.
引用返信 編集キー/
■22720 / inTopicNo.11)  Re[7]: ページフォルトについて
□投稿者/ NyaRuRu (51回)-(2008/07/30(Wed) 15:03:51)
2008/07/30(Wed) 15:04:25 編集(投稿者)

*二重投稿につき削除
引用返信 編集キー/
■22746 / inTopicNo.12)  Re[8]: ページフォルトについて
□投稿者/ セイン (92回)-(2008/07/31(Thu) 11:30:33)
なるほど了解です。
ページアウトされたプライベート領域のページイン (*)
これを基本的には考えるといいんですね。

どんどん増えていくページフォルトの値に臆してしまいました。
すいません。
newとdeleteによって増え続けるページフォルトは動作的に問題ない
ということですね。ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -