对于Linux 64位系统,理论上,64bit内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的空间,Linux实际上只用了其中一小部分(256T)。

Linux64位操作系统仅使用低47位,高17位做扩展(只能是全0或全1)。所以,实际用到的地址为空间为0x0000000000000000 ~ 0x00007FFFFFFFFFFF(user space)和0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF(kernel space),其余的都是unused space。

user space 也就是用户区由以下几部分组成:代码段,数据段,BSS段,heap,stack

在精细一些:一个进程在内存中的分配如下


在kernel中描述如下:

========================================================================================================================Start addr    |   Offset   |     End addr     |  Size   | VM area description
========================================================================================================================|            |                  |         |0000000000000000 |    0       | 00007fffffffffff |  128 TB | user-space virtual memory, different per mm
__________________|____________|__________________|_________|___________________________________________________________|            |                  |         |0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical|            |                  |         |     virtual memory addresses up to the -128 TB|            |                  |         |     starting offset of kernel mappings.
__________________|____________|__________________|_________|___________________________________________________________|| Kernel-space virtual memory, shared between all processes:
____________________________________________________________|___________________________________________________________|            |                  |         |ffff800000000000 | -128    TB | ffff87ffffffffff |    8 TB | ... guard hole, also reserved for hypervisorffff880000000000 | -120    TB | ffff887fffffffff |  0.5 TB | LDT remap for PTIffff888000000000 | -119.5  TB | ffffc87fffffffff |   64 TB | direct mapping of all physical memory (page_offset_base)ffffc88000000000 |  -55.5  TB | ffffc8ffffffffff |  0.5 TB | ... unused holeffffc90000000000 |  -55    TB | ffffe8ffffffffff |   32 TB | vmalloc/ioremap space (vmalloc_base)ffffe90000000000 |  -23    TB | ffffe9ffffffffff |    1 TB | ... unused holeffffea0000000000 |  -22    TB | ffffeaffffffffff |    1 TB | virtual memory map (vmemmap_base)ffffeb0000000000 |  -21    TB | ffffebffffffffff |    1 TB | ... unused holeffffec0000000000 |  -20    TB | fffffbffffffffff |   16 TB | KASAN shadow memory
__________________|____________|__________________|_________|____________________________________________________________|| Identical layout to the 56-bit one from here on:
____________________________________________________________|____________________________________________________________|            |                  |         |fffffc0000000000 |   -4    TB | fffffdffffffffff |    2 TB | ... unused hole|            |                  |         | vaddr_end for KASLRfffffe0000000000 |   -2    TB | fffffe7fffffffff |  0.5 TB | cpu_entry_area mappingfffffe8000000000 |   -1.5  TB | fffffeffffffffff |  0.5 TB | ... unused holeffffff0000000000 |   -1    TB | ffffff7fffffffff |  0.5 TB | %esp fixup stacksffffff8000000000 | -512    GB | ffffffeeffffffff |  444 GB | ... unused holeffffffef00000000 |  -68    GB | fffffffeffffffff |   64 GB | EFI region mapping spaceffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | ... unused holeffffffff80000000 |   -2    GB | ffffffff9fffffff |  512 MB | kernel text mapping, mapped to physical address 0ffffffff80000000 |-2048    MB |                  |         |ffffffffa0000000 |-1536    MB | fffffffffeffffff | 1520 MB | module mapping spaceffffffffff000000 |  -16    MB |                  |         |FIXADDR_START | ~-11    MB | ffffffffff5fffff | ~0.5 MB | kernel-internal fixmap range, variable size and offsetffffffffff600000 |  -10    MB | ffffffffff600fff |    4 kB | legacy vsyscall ABIffffffffffe00000 |   -2    MB | ffffffffffffffff |    2 MB | ... unused hole
__________________|____________|__________________|_________|___________________________________________________________

参考:
https://www.cnblogs.com/arnoldlu/p/8051674.html
https://www.cnblogs.com/yizhanwillsucceed/p/13578076.html
https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt

Linux 64位进程地址空间分布概况相关推荐

  1. 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享

    [Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...

  2. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

  3. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...

    第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...

  4. .net core vs java_VS Code 1.19.3调试.net core 2并始终满足“只能调试64位进程”

    我在笔记本电脑上安装了 .net core 2.0 的x86和x64 sdk(win 7 sp1 x64) . 我不知道为什么vs代码(1.19.3和x64&官方c# extension)总是 ...

  5. Kali Linux 64位架构安装Veil-Evasion

    Kali Linux 64位架构安装Veil-Evasion Veil-Evasion是一种生成有效载荷可执行文件的工具,可绕过常见的防病毒软件.由于技术的发展,大部分人都选择安装的Linux系统架构 ...

  6. LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8

    标签: 第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署  2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elastic ...

  7. 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  8. linux卸载minicoda2,MiniConda2下载 MiniConda python 2.7 v4.3.30.2 Linux 64位 官方免费版(附安装步骤) 下载-脚本之家...

    MiniConda python 2.7 Linux版是一款可以在Linux系统下使用的Python 环境管理工具,同时MiniConda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软 ...

  9. 64位进程调用32位dll的解决方法

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

最新文章

  1. 赛门铁克针对勒索软件WannaCry发布全球预警
  2. C/C++各种系统开发环境搭建
  3. “睡服”面试官系列第十九篇之async函数(建议收藏学习)
  4. 【python】list append()和extend()区别
  5. 添加作者_卤肉,有“添加剂”才香?大错特错,没有这5种香料,什么味道都没有...
  6. Ubuntu之sshfs远程目录挂载到本地
  7. nyoj 1172 unlucky number
  8. 【Unity3D入门教程】Unity3D播放音频和视频
  9. mysql实时监控工具
  10. 改变世界的17个数学公式
  11. Qt编译报错:Error in Util.asciify(build-Project1_msvc-Desktop_Qt_5_8_0_MSVC2015_32bit_qt_58_w-Debug)
  12. Aras Innovator: TOC category的视图
  13. matlab中options,[转载]Matlab优化函数中options选项的修改
  14. 分机计算机怎么设置共享打印机,win7打印机共享设置分机怎么设置
  15. React-moveable的使用
  16. Qt编写可视化大屏电子看板系统13-基础版
  17. 做一个功能比较齐全的小程序商城选择好的系统很重要
  18. Android系统安全机制
  19. Yocto创建自己的分区(基于STM32MP1)
  20. 防抖和节流的理解与实现

热门文章

  1. [USACO18OPEN]Talent Show
  2. 斐波那契数列的Python实现
  3. 谷歌为何会选用TypeScript?
  4. python笔记(一)——python中的类及内置函数
  5. 配置文件上传的Action
  6. 移植性问题のCString类型转换,字符串操作和UNICODE、ANSI字符集
  7. Honey Dance I believe
  8. 陌陌看好的移动营销 Criteo表示尚未成为主流
  9. Linux MTD子系统 _从模型分析到Flash驱动模板
  10. KVM之初体验——QEMU安装虚拟机