12

我可以使用 c++ 中的指针分配特定的内存地址吗?

例如: 分配这个内存地址 25D4C3FA 并放入 4。

4

4 回答 4

21

在进程的地址空间中分配特定地址有点棘手且特定于平台。在 Unix 系统上,mmap()可能是最接近的。Windows 等效项是VirtualAlloc(). 当然,没有任何保证,因为地址可能已经在使用中。

写入特定地址很简单:

char *p = (char*)0x25D4C3FA;
*p = 4;

我认为你有充分的理由想要这样做。

于 2012-04-28T14:50:48.173 回答
3

在 Windows 中,是的。

伪代码:

Pointer desiredAddress = 0xD0000000;

//allocate 1 KB at our desired address
Pointer p = VirtualAlloc(desiredAddress, 1024, 
      MEM_COMMIT | MEM_RESERVE,  
      PAGE_READWRITE);
于 2013-09-30T20:28:16.050 回答
0

假设通过allocate你实际上是指access

您可以,但如果地址无效或不可访问,则推迟该地址将导致未定义行为。
因此,这样做不是一个好主意。

于 2012-04-28T14:52:26.317 回答
0

您可以在 Windows 上通过 VirtualAlloc 请求特定地址,我希望其他操作系统也这样做,但没有保证,也没有平台无关的方法。

于 2012-04-28T15:07:52.863 回答