C ++のポインタを使用して特定のメモリアドレスを割り当てることはできますか?
例:このメモリアドレス25D4C3FAを割り当て、それに4を入れます。
プロセスのアドレス空間に特定のアドレスを割り当てるのは少し注意が必要で、プラットフォーム固有です。Unixシステムでmmap()
は、おそらくこれが最も近いものです。Windowsに相当するものはVirtualAlloc()
です。もちろん、アドレスがすでに使用されている可能性があるため、保証はありません。
特定のアドレスへの書き込みは簡単です。
char *p = (char*)0x25D4C3FA;
*p = 4;
私はあなたがそれをしたい正当な理由があると思います。
Windowsではそうです。
擬似コード:
Pointer desiredAddress = 0xD0000000;
//allocate 1 KB at our desired address
Pointer p = VirtualAlloc(desiredAddress, 1024,
MEM_COMMIT | MEM_RESERVE,
PAGE_READWRITE);
割り当てることによって実際にアクセスを意味すると仮定すると、
可能ですが、アドレスが無効であるかアクセスできない場合、アドレスを延期すると未定義動作になります。
したがって、そうすることはお勧めできません。
WindowsのVirtualAllocを介して特定のアドレスを要求できます。他のオペレーティングシステムでも同じことができると思いますが、保証やプラットフォームに依存しない手段はありません。