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

时间:2012-04-28 14:49:15

标签: c++ memory pointers

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

例如:分配此内存地址25D4C3FA并将4放入其中。

4 个答案:

答案 0 :(得分:17)

在进程的地址空间中分配特定地址有点棘手并且特定于平台。在Unix系统上,mmap()可能是你最接近的。 Windows等效项为VirtualAlloc()。当然,由于该地址可能已被使用,因此无法保证。

写入特定地址是微不足道的:

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

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

答案 1 :(得分:2)

在Windows中,是的。

伪码:

Pointer desiredAddress = 0xD0000000;

//allocate 1 KB at our desired address
Pointer p = VirtualAlloc(desiredAddress, 1024, 
      MEM_COMMIT | MEM_RESERVE,  
      PAGE_READWRITE);

答案 2 :(得分:0)

假设通过分配,您实际上是指 access

您可以,但如果地址无效或无法访问,则引用该地址将导致未定义的行为 所以这样做并不是一个好主意。

答案 3 :(得分:0)

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