美文网首页
48位寻址模式

48位寻址模式

作者: 阿群1986 | 来源:发表于2020-02-21 15:08 被阅读0次

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

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

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

    图 cat /proc/cpuinfo 命令执行结果

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

    内存地址【0x0000000000000000 ~ 0x00007fffffffffff】 属于用户空间共128TB;
    内存地址【0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF】 属于内核空间,也是128TB;
    
    内存地址【0x0000800000000000 ~ 0xFFFF7fffffffffff】 
    =65535*2^48 ≈ 839万TB地址是无效地址
    

    这两个区间的特点是第 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

    相关文章

      网友评论

          本文标题:48位寻址模式

          本文链接:https://www.haomeiwen.com/subject/efucqhtx.html