2017-04-18 11 views
-1

Cのポインタは何のメモリアドレスを格納するのに使われているのですが、これは何のメモリですか?私はそれがRAMまたはハードディスクであることを意味しますか? 変数は、プログラムが実行されているときだけ変数が存在するため、変数iはRAMでなければならないと判断できます。しかし、機能についてはどうですか?関数を指すポインターを作成すると、プログラムが実行されていなくても関数が存在するため、ハード・ディスク内の関数のアドレスを指す必要があります。これがそうであれば、それがRAMかハードディスクに対応するかどうか、メモリアドレスを調べることによってどのように知ることができますか?ポインタはどのタイプのメモリアドレスを指していますか?

また、たとえば、ハードディスクに10MBを占有するプログラムがあり、プログラムを実行すると、最初にすべてのプログラムがRAMにロードされます。プログラムはRAMでも10MBを占有していますか?もしそうでなければ、RAMにプログラムが占めるメモリを決定する要因は何ですか?

+0

[この回答](http://stackoverflow.com/a/34463661/2173917)help? –

+0

"*まず最初に、プログラムはRAMにロードされます。*"最新のOSではありません。 –

+0

これは言語タグとは関係なく、削除されました。 –

答えて

0

ポインタは、いくつかのメモリを指します。それが指すメモリは、用途/環境に依存します。

通常、ユーザー空間プログラムの場合、ポインタはvirtual address spaceのいくつかのアドレスを指しています。

一方、低レベルのシステムプログラミング(カーネルなど)およびMMUのないOSの場合は、物理メモリを指します。

つまり、RAMまたはハードディスクですか?

いずれも、どちらもありません。それはすべて依存している。一般に、プログラム実行開始時には、各プロセスに仮想アドレス空間が割り当てられる。必要な「実際の」メモリが「要求時に」利用可能であることを確認するのは、MMU/OSの仕事です。また、ページングの概念も含まれます。 wikipediaから

コピー、

  0           4GB 
VAS 1  |---vvvv-------vvvvvv---vvvv----vv---v----vvv--| 
mapping  ||||  |||||| |||| || | ||| 
file bytes  app1 app2 kernel user system_page_file 
mapping    |||| |||||| ||||  || | 
VAS 2  |--------vvvv--vvvvvv---vvvv-------vv---v------| 

それは、

  • プロセスの仮想アドレス空間 "APP1"
  • プロセスの仮想アドレス空間 "APP2"
  • 仮想を示しカーネルプロセスのアドレス空間
  • uの仮想アドレス空間serspace libraries
  • 仮想メモリにアクセスするために使用されるページファイルの仮想アドレス空間マッピング。
1

ポインタは、プロセスの仮想アドレス空間を指します。アドレスは、RAM、ディスク、いずれか、またはその両方によってバックアップされることがあります。例えば

  1. あなたはmallocと、いくつかのメモリを割り当てます。おそらくこの時点で何の支援もないでしょう。

  2. あなたはそのメモリに書き込みます。今はおそらくRAMによってサポートされています。

  3. メモリマップファイルです。これは、この時点でファイルによってサポートされています。

  4. あなたはそのメモリから読み込みます。これで、ファイルとRAMの両方がサポートされます。

  5. OSはディスクキャッシュ用にもう少しRAMを必要とし、しばらくの間はそのメモリにアクセスしていないので、読み込んだページが削除され、メモリマッピングはファイルによって再びバックアップされます。

  6. OSは、mallocで割り当てたメモリをバックアップしていたページを盗み出して書き出しました。そのメモリはページングファイルのみでバックアップされるようになりました。

そしてまた、私はハードディスクに10メガバイトを占め、私は最初にすべてのプログラムの、プログラムの実行時にRAMにロードされたプログラムを持っている場合、例えば。

あなたが使用する可能性の高い最新のOSはありません。代わりに、10MBの仮想アドレス空間が割り当てられ、実行可能ファイルによってバックアップされます。ページはアクセスされるとRAMに読み込まれ(RAMのページが割り当てられます)

プログラムでもRAMで10MBを占有していますか?

まだありません。しかし、ページにアクセスするにはRAMが必要になります。

もしそうでなければ、RAMにプログラムが占有するメモリを決定する要因は何ですか?

これは、システム全体に最高のパフォーマンスを提供するものに基づいて、OSが決定しなければならない決定です。あなたは、RAMが利用可能であり、データがアクセスされているかアクセスされていないので、RAMをキャッシュとして扱うことができます。

関連する問題