2017-11-01 14 views
1

へのポインタを使用して、私は疑問を持って、私はプログラムからの変数のメモリアドレスをチェックして、ポインタにそのアドレスを保存することも可能ですその場所に格納されている値を出力します。ダイレクトメモリアクセス、私は<strong>C++のポインタ</strong>で遊んでいたアドレス

プログラム1:

int t1 = 34; 
int t2 = 0; 

std::cout << &t1; 
std::cin>>t2; 

これは最初のプログラム、I入力 COUT によって出力される第2のプログラムのT1アドレス、。

プログラム2:

int* t3 = (int*)address_of_t1 // address of t1 is not a function....it will be replaced by the address returned by first program 
int out = *t3; 
cout <<out; 

私は0最初のプログラムを実行し、それが入力待ちましょう、ランニングを保つ。.. すると同時に、私は2番目のプログラムを実行しますが、2番目のプログラムは、常に出力、それは決して第1プログラムからのt1の値を示す。

+2

これを最新のOSで実行している場合、デフォルトでは、関係のない2つのプロセスのメモリスペースが互いに分離しています。 – StoryTeller

+0

「直接メモリアクセス」という用語は、「特別な意味を持つ」(https://en.wikipedia.org/wiki/Direct_memory_access)という点で少し残念です。 – MSalters

答えて

0

これは現代のオペレーティングシステムでは不可能です。メモリは仮想です。つまり、全く異なる物理メモリの場所にマップされた2つの異なるプロセスで同じアドレスを持つことができます。 詳細はこちら:https://en.wikipedia.org/wiki/Virtual_memory

+1

不可能ではありません。 OS固有の呼び出しとプロセス設定が必要です。 – StoryTeller

0

いいえ、それはできません。

1つのプロセスで取得するアドレスは、その特定のプロセスで一意です。現代のオペレーティングシステムはすべて、実行可能コードを実行するために仮想メモリアドレス空間を割り当てます。

関連する問題