我想更好地了解32位Windows c ++应用程序的虚拟地址空间。我发现图片在互联网上代表它(link)。它或多或少是正确的吗? 我创建了一些依赖于静态库和DLL的sample.exe应用程序,并打印了变量和函数的地址(都在表中)。我发现我的结果和这张图片之间存在差异: 1.程序映像部分应该启动时有固定的0x00400000地址。但是我看到堆上的变量的地址为0041A168。它们不应该小于0x00400000或更高然后所有程序图像地址? 2.我打印std :: abs(double)的地址,它在程序图像部分。这是否意味着它在某个静态库中? 我打印了getchar和fopen的地址。这是否意味着它们在DLL库中?
答案 0 :(得分:0)
您的图表是一种教学工具,不能反映现实世界的实施情况。您唯一可以指望的是,某些范围的地址将专用于用户空间,而另一个范围将专用于系统空间。
您可以在某种程度上依赖于标记为无法访问的低范围页面。但是,这通常可以被用户覆盖。