2

2 つの CPU と 64 GB の RAM、CPU あたり 32 GB のサーバーがあります。

各CPUにはRAMの独自の部分があることを知っています.RAM1とRAM2と呼びましょう。プログラムにデータを割り当てる RAM (RAM1 または RAM2) を知らせたいと思います。

ポインターの値を確認しようとしました:

  // put the thread at i-th CPU, using pthread_setaffinity_np
TData *a = new TData[N];
...
cout << "CPU = " << i << " adress = " << a << endl; 

しかし、出力はランダムに見えます。これは、アドレスが仮想であるためだと思います。仮想メモリ アドレスと RAM の一部との間に対応関係はありますか?

配列「a」が割り当てられているRAMを確認するにはどうすればよいですか?

4

2 に答える 2

2

メモリーは MMU によって仮想化されるため、各プロセスは 2^64 に等しいサイズのメモリー空間を認識します。プロセス内では、アドレスは仮想であるため、意味がありません。プロセス レベルでは、仮想アドレス (アプリケーションから見える) と物理アドレス (RAM 上の) の間に対応関係はありません。

アプリケーションは、現在使用している物理アドレスをオペレーティング システムに照会する必要があります。

于 2013-11-06T13:51:59.243 に答える