- PR -

ソフトのメモリの領域

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-12-09 01:35
そのソフトが使っているメモリの領域といいますか範囲といいますか
どこを使っているかはどうやって確認するものなのでしょうか?
ご存知の方教えていただければありがたいです。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-12-09 19:37
こんばんは。

引用:

未記入さんの書き込み (2007-12-09 01:35) より:
そのソフトが使っているメモリの領域といいますか範囲といいますか
どこを使っているかはどうやって確認するものなのでしょうか?
ご存知の方教えていただければありがたいです。



すいません。ご質問がよくわかりません。

物理アドレスでですか?論理アドレスでですか?
Windows環境でですか?それともマイコン上でですか?
なぜそんなことを知りたいのですか?
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-12-09 21:10
勉強不足で申し訳ありません。
物理アドレスと論理アドレスと種類があるのですか
ありがとうございます。
Windowsです。
この質問をした理由は自分の作ったソフトが
メモリに何をどういう風に保存しているか知りたかったからです。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-12-09 21:58
引用:

この質問をした理由は自分の作ったソフトが
メモリに何をどういう風に保存しているか知りたかったからです。



C++ なら debug すればどこにどうゆう風に保存されるかなんていちころですね。
もっともわかるのは virtual address ですけど。
Physical address となると Debugging Tools for Windows でも使わないとわからないと思いますけど。
ただ、physical address 取得してどうするんだろ?
意識しないでもいいようにあえて virtual address 使っているんですが。

それから .NET 系も意識しないほうがいいと思いますよ。
.NET 系は JAVA と同じく memory を VM で管理しているので address 自体が突然動く可能性があります。

そこら辺を詳しく理解したいというなら話はわかりますが、たぶんあなたの場合それ以前に覚えるべきことが多いんじゃないでしょうか?
_________________
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-12-10 00:56
引用:

未記入さんの書き込み (2007-12-09 21:10) より:
勉強不足で申し訳ありません。
物理アドレスと論理アドレスと種類があるのですか



この辺を説明しだすと大変なので適当にリンクだけ張っておきます。
ちゃんと理解するのは大変でしょうが、基本概念程度は理解しておいたほうがよいと思います。

仮想記憶(Wikipedia)
メモリ管理ユニット(Wikipedia)
Linuxメモリー・モデルの探究

引用:

Windowsです。
この質問をした理由は自分の作ったソフトが
メモリに何をどういう風に保存しているか知りたかったからです。



論理アドレス前提で話しますが…

最近のWindows(XP,Vista)はNTカーネル系なので
ソフトには、OSからプロセス毎に完全に独立したアドレス空間が与えられています。
32bit版では(実際使うかどうかは別として)0〜FFFFFFFF(H)の4Gバイトが与えられていることになります。
この4Gバイトのアドレス空間のどこかを覗けば、どういう風にメモリ上に格納しているかが分かるわけですが…

VisualStudioを使って開発しているのであれば、
ソフトをデバッグ実行して適当なところで中断(ブレーク)させたのち
メニューから[デバッグ]-[ウィンドウ]-[メモリ]を選択すれば、
与えられたアドレス空間を覗くことができます。

…とりあえず、ここまでにしときます。

C#やVB.netなどの所謂マネージコードでは、完全にメモリを覗くのは難しいでしょう。
それでもある程度は、上記方法で見ることができるようですので、眺めてみると面白いと思います。

#個人的にはメモリのイメージを掴んでおくことは、非常に価値あることだと思います。


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-12-10 00:59 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-12-10 10:33
HeapWalkを使えばOSがそのプロセスにどのようなメモリを割り当てているのか、ある程度わかります。これにレジストリのCS、DSの値やPEヘッダ、アプリケーションビルド時のマップファイルの内容を加えると、何の用途のメモリか大体判ります。ですが、実際にはOSのメモリ管理システムの上から、アプリケーションのメモリ管理システムラッピングしていることも多く、それらをきっちり理解して解析できる技術屋は数えるほどしか居ないと思いますよ。

よほどメモリ使用量の大きなソフトウェアを作るとか、デバイスドライバを作るといった要件じゃない限り、メモリがどのように割り当てられているかを意識する必要はないでしょう。

もし本当に学びたいなら、OS開発に関する技術書やハードウェア制御に関する技術書など当たられるのが良いと思います。
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-12-10 18:18
ちゃっぴさんアドバイスありがとうございます。
敷居が高いみたいですね。

Tdnr_Symさんご丁寧に教えていただいてありがとうございます。
僕はC# Express Editionを使っているので
メモリを見る機能が無いようです。
C#だとちょっと難しそうですね。

甕星さんありがとうございます。
ちょっと本屋さんでどんなものか見てみたいと思います。
ugaya
会議室デビュー日: 2006/08/03
投稿数: 18
投稿日時: 2008-03-03 11:02
引用:

Windowsです。
この質問をした理由は自分の作ったソフトが
メモリに何をどういう風に保存しているか知りたかったからです。



この目的ならCLR Profilerというフリーソフトで用を満たすことができると思います。
複雑な処理を行うループがメモリを圧迫している時にこのツールで原因を解析しました。便利ですよ!

CLRProfilerについての参考記事
http://www.microsoft.com/japan/msdn/enterprise/pag/scalenethowto13.aspx

ちなみにリンク先のCLR Profilerは記事が書かれた時間的におそらく.net1.1用のものなので

http://www.microsoft.com/downloads/details.aspx?familyid=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en

こちらをダウンロードされると良いと思います。
1

スキルアップ/キャリアアップ(JOB@IT)