C++ 指针显示不可能的内存位置

C++ pointer showing impossible memory location

我创建了一个C++变量并打印了它的地址,结果非常大:0x7ffdf584da2c。
我的代码如下:

#include <iostream>
using namespace std;
int main()
{
    int var = 10;
    cout << "value: " << var << " address: " << &var << endl;
    return 0;
}


value: 10 address: 0x7ffec6f111c4

这种十六进制内存地址 (0x7ffdf584da2c) 看起来不可能,因为它的十进制结果是 (140728722577964),这对我的笔记本电脑来说相当大。
我有一台 Windows 10 和 Ubuntu 以及大约 500 GB 内存的双启动笔记本电脑。代码写在Ubuntu.

还好。

2020 年的计算机非常复杂。您的进程得到一个 virtual address space,其最大值 "slot" 几乎肯定会超过系统(和页面文件)上实际 RAM 的大小。

您看到的是从内存顶部(不是实际内存,而是操作系统处理的内容)到底部的堆栈。因此,通常 if 以受限于 OS 和体系结构位(32、64,...)的高值开始。