web-dev-qa-db-ja.com

RAM持っている量を計算するにはどうすればよいですか?

動的に割り当てられたメモリ(mallocrealloc、およびfree)について学習するために、単純なC++プログラムを実行しています。

これが私のコードのスニペットです:

void *p = malloc(10); // Allocates 10 bytes in memory; `p` is a pointer to the first byte.

cout << "The value of the pointer p is:      " << p << endl;

これは次のようなものを出力します:

The value of the pointer p is: 0x7fbf36c00080

16進数は、この割り当ての最初のメモリ位置であるpが指すメモリ位置であることを認識しています。

RAMの量を大まかに計算しようとすると、その16進数の桁数(12桁)を調べて、16をその累乗にしました。

16 ^ 12はほぼ2.8x10 ^ 14に等しく、各メモリ位置には1バイトが格納されているため、8 GBがあることはわかっていても、約280テラバイトのRAMがあります。

計算のどこが間違っていますか?

1
AkThao

物理メモリがプロセスのアドレス空間にマップされていることを理解するには、 仮想メモリ の概念を学習する必要があります。

64ビットプロセスには最大2つのポインターがある可能性があるという事実64-1は、このすべてのメモリが存在することを意味するわけではありません。ポインタは、コンピュータのどこかにある物理メモリにマップされている メモリセグメント を指します。

実際に使用しているメモリの量を知っているのはオペレーティングシステムだけなので、その量を取得するにはAPIを使用する必要があります。

私の最初のウィキペディアのリンクに示されているように:

enter image description here

1
harrymc