48位寻址模式

对于32位Linux操作系统,内存虚拟地址寻址空间为 232 字节=4GB。
然而,64位Linux操作系统下内存虚拟地址寻址空间并不是 264,而是 248
因为并不需要 264 这么大的寻址空间,过大空间只会导致资源的浪费。64位Linux一般使用48位来表示virtual虚拟地址空间,36至40位表示physical物理地址。

virtual地址和physical地址之间存在单项映射关系,映射表由CPU内部的MMU内存管理单元管理。

这可通过cat /proc/cpuinfo 命令来查看:

1458798-52b49c0ee75324e6.jpg
图 cat /proc/cpuinfo 命令执行结果

64位操作系统实际可提供2^48 = 256TB 的virtual寻址空间,其中:

内存地址【0x0000000000000000 ~ 0x00007fffffffffff】 属于用户空间;
内存地址【0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF】 属于内核空间;

这两个区间的特点是第 47 位与 48~63 位相同(若这些位为 0 表示用户空间,否则表示内核空间)。

在用户空间运行的代码,所有指针都是8字节

  • void *指针占8字节=64位(其中只有低48位有效,第64至48位应始终为0);

基本整数类型长度定义:

  • int 类型占4字节空间;
  • long类型占8字节空间;
  • long long类型也占8字节空间;
  • short = 2字节;
  • char = 1字节;
  • size_t = 8字节;
  • 4种固定长度的int类型:int64_t, int32_t, int16_t, int8_t
  • 4种固定长度的无符号int类型:uint64_t, uint32_t, uint16_t, uint8_t
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值