为何变量内存地址数值远超32GB物理内存?
为什么32GB内存的电脑会出现远超内存容量的变量地址?
你看到的是虚拟内存地址,不是物理内存地址
现代操作系统(比如Windows、Linux、macOS)都采用虚拟内存机制,每个运行的进程都拥有独立的虚拟地址空间。这个虚拟空间和物理内存没有直接的一一对应关系,64位系统下,每个进程的虚拟地址空间理论上限能达到2^64(实际会被系统做部分限制),所以出现0x7fff开头的64位大地址完全正常,和你的32GB物理内存大小没有直接关联。虚拟地址到物理地址的映射由操作系统和CPU的内存管理单元(MMU)完成
程序中访问的所有内存地址都是虚拟地址,操作系统会在程序需要使用对应内存时,把虚拟地址对应的内存页映射到物理内存的某个位置,甚至在物理内存不足时,暂时把部分数据放到硬盘的交换空间中。你的32GB物理内存只是系统可同时使用的物理空间上限,但每个进程的虚拟地址空间是独立且远大于这个值的。额外说明:0x7fff开头的地址通常属于进程的栈空间
你代码里的变量i是局部变量,默认存储在进程的栈区域。在64位系统中,栈的虚拟地址通常位于高地址区域,所以会看到这类数值较大的地址。
内容的提问来源于stack exchange,提问作者Kostas
相关产品推荐
相关产品推荐

