#include <stdio.h>
int main() {
int num=1234;
printf("%p", &num);
return 0;
}
//Ouput:
//0xffffcbfc
0xffffcbfcはRAMまたはハードドライブのアドレスメモリですか?ポインタアドレスメモリはRAMまたはハードドライブに属していますか?
#include <stdio.h>
int main() {
int num=1234;
printf("%p", &num);
return 0;
}
//Ouput:
//0xffffcbfc
0xffffcbfcはRAMまたはハードドライブのアドレスメモリですか?ポインタアドレスメモリはRAMまたはハードドライブに属していますか?
厳密に言えば、変数のアドレスを表示するときに表示されるアドレスは仮想メモリからです(ほとんどの場合、virtual memoryを使用するOSでプログラムを実行しています)。
ご使用のOSが仮想メモリを使用していない場合、そのアドレスはRAMから直接得られます。
プログラムを実行するには、プログラムをメモリ(RAM)にロードする必要があります。要するに、ではなく、はハードドライブからアドレスを取得します。
このコードは、厳密に言えば、未定義の動作を示しています。それは%p
が期待するものですので、あなたはvoid *
へのポインタを変換する必要があります。
printf("%p\n", (void *) &num);
をそして、それは、物理デバイスの種類がアドレスを保持しているまさにビューのCの時点から、おそらく未指定だが、一般的なコンピュータ上では、RAMになるだろう。
これらのトピックを表す参照を取得する方法。 – EsmaeelE
これは概念上RAMであるスタックアドレスです。それは実際の物理RAMアドレス(現代システムでは)ではなく、実際にはカーネルが行う簿記を反映するだけです。
HDを搭載したコンピュータのプログラムは、常にOSによってRAMにロードされ、そこから実行されます。すべてのアドレスがRAMをポイントします。
プログラムから直接HDメモリをアドレス指定することはできません。ファイルシステムを経由する必要があります。
https://stackoverflow.com/questions/5029938/c-pointers-and-the-physical-address – jeja