gpt4 book ai didi

c - 为什么每次运行时虚拟内存中分配的 block 差异如此之大?

转载 作者:可可西里 更新时间:2023-11-01 14:42:37 24 4
gpt4 key购买 nike

我知道这可能被认为是一个愚蠢的问题。但我的好奇心比对反对票的恐惧更强烈。下面的代码简单地预留了 1GB 的进程虚拟内存,打印预留 block 的地址并释放该 block 。

#include <iostream>
#include <Windows.h>

int main()
{
// Reserves 1GB of the process virtual memory

LPVOID lp1 = VirtualAlloc((LPVOID)NULL, 0x40000000, MEM_RESERVE, PAGE_NOACCESS);

std::cout << lp1 << '\n';

// Releases the 1GB block of virtual memory

VirtualFree(lp1, NULL, MEM_RELEASE);
}

我在 x64 机器上运行这段代码几次,并获得了以下 lp1 地址:

0x1e 9c22 0000
0xe1 8000 0000
0x16 92a3 0000
0x34 83ec 0000

为什么每次运行的地址差异如此之大?我知道 MS 文档对此没有任何说明,但我想知道是否对这种奇怪的行为有一些合理的解释?

最佳答案

没有理由在分配之间不同,但在后续分配时提供不同地址的一个普遍原因是使安全漏洞更难实现。

这个想法是,如果能够知道程序运行之间的内存位置,利用代码就更容易实现。另一个原因可能是您看到的不同地址只是分配器如何跟踪内存的副作用。

关于c - 为什么每次运行时虚拟内存中分配的 block 差异如此之大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com