我可以使用c ++中的指针分配特定的内存地址吗?
例如:分配此内存地址25D4C3FA并将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请求特定地址,我希望其他操作系统也这样做,但是没有任何保证,也没有与平台无关的方法。