我可以使用 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);
假设通过allocate你实际上是指access,
您可以,但如果地址无效或不可访问,则推迟该地址将导致未定义行为。
因此,这样做不是一个好主意。
您可以在 Windows 上通过 VirtualAlloc 请求特定地址,我希望其他操作系统也这样做,但没有保证,也没有平台无关的方法。