当传递0x000'00000000(NULL)作为VirtualAlloc的第一个参数时,系统确定将区域分配到哪里,或者如果函数失败,则返回值为NULL(0x000'00000000).

对于64位Windows上的64位进程,虚拟地址空间的范围从0x000'000000000x7FFF'FFFFFFFF.

那么,如何在不出现函数故障和系统确定将区域分配到何处的情况下保留从0x000'00000000开始的页面呢?

推荐答案

从字面上看你的问题,你要求每页reserve页,但没有提交.这很简单;操作系统已经在进程启动时为您做了防止65536并对所有使用这that page being committed by accident个地址作为特殊值的函数造成严重 destruct 的操作,比如空指针或integers disguised as string pointers like MAKEINTRESOURCE,或者正如Hans passant在 comments 中提到的那样,通过将该页中的每个访问冲突视为空指针异常来 destruct CLR的空指针检测.

然而,从Windows8,you cannot unreserve that page anymore开始.

C++相关问答推荐

了解一些CLIPS原语数据类型

如何在C中只使用一个带双方括号([i][j])访问语法的malloc来分配动态大小的2d数组?

为什么在C中二维字符数组会有这样的行为?

不会停在空格或换行符上的错误

模拟shell并运行.sh文件

具有交换链获取和命令缓冲区提交的同步-危险-读后写错误

CSAPP微型shell 实验室:卡在sigprocmask

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

Boyer Moore算法的简单版本中的未定义行为

为什么Fread()函数会读取内容,然后光标会跳到随机位置?

在C++中父进程和子进程中的TAILQ队列同步问题

无法访问共享目标文件内的共享指针

如何将两个uint32_t值交织成一个uint64_t?

如何在C中用bool进行文件I/O?

使用C++中的字符串初始化 struct 时,从‘char*’初始化‘char’使指针变为整数,而不进行强制转换

变量值不正确的问题

分配给静态变量和动态变量的位置之间有区别吗?

哪些C++功能可以在外部C块中使用

uint64_t:四舍五入除法