32位下的内存地址分布图如下:1g为内核空间,3g为用户空间

内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于内核空间。

用户空间:

用户空间占用从0x00000000到0xBFFFFFFF共3GB的线性地址空间,每个进程都有一个独立的3GB用户空间,所以用户空间由每个进程独有,但是内核线程没有用户空间,因为它不产生用户空间地址。另外子进程共享(继承)父进程的用户空间只是使用与父进程相同的用户线性地址到物理内存地址的映射关系,而不是共享父进程用户空间。运行在用户态和内核态的进程都可以访问用户空间。

在用户空间内内存被分为:0x08048000开始

text段-代码段

text段存放程序代码,运行前就已经确定(编译时确定),通常为只读

.rodata-只读数据段

存放一些只可以读的常量数据 比如:被const修饰的全局变量,被define宏定义的常量,和只可读的字符串常量。

.data

存放在编译阶段(而非运行时)就能确定的数据,可读可写。也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存放在这个区域,static 声明的变量,不管它是全局变量也好,还是在函数之中的也好,只要是没有赋初值都存放在.bss段,如果赋了初值,则把它放在.data段。

.bss

定义而没有赋初值的全局变量和静态变量,放在这个区域;

heap

堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);

当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。由低向高。

共享库区域

这里被内核用来把文件内容直接映射到内存。所有的应用程序都可以使用linux提供的mmap()系统调用或者在windows中使用CreateFileMapping()/MapViewOfFile来进行这样的映射。memory mapping是进行文件I/O的高效方法,所以动态库的加载使用这个方式来实现。当然,也可以进行一些不关联到文件的程序数据的匿名memory mapping。在linux中,如果你通过malloc()来申请一块大的内存,C库就会在memory mapping segment中创建一个匿名memory mapping而不是使用堆空间。这里的“大”意味着大于MMAP_THRESHOLD字节,默认是128kb,可以通过mallopt()来进行调整。

stack

stack段存储参数变量和局部变量,由系统进行申请和释放,属于静态内存分配。由高向低

linux 内存 实例,linux内存地址分配(示例代码)相关推荐

  1. linux跑程序内存不够,linux 未跑程序 内存 cache使用过大(示例代码)

    linux与windows不同,会存在缓存内存,通常叫做Cache Memory.有些时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存会很少,此时查看Linux系统 /proc ...

  2. linux mor命令使用技巧,linux中more命令如何使用(示例代码)

    more命令,功能类似cat,cat命令是整个文件的内容从上到下显示在屏幕上.兄弟连Linux培训教程(more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页 ...

  3. linux pdf 转 txt文件,linux 下 pdf 转换成txt(示例代码)

    pdf有转换,如果是非扫描的,转换很快,识别率100%,很多软件可以转:如果是扫描的,就比较麻烦需要用到OCR技术(文字识别). 在linux下: 依赖包  poppler-utils  tesser ...

  4. linux c打印日志文件,linux c下log输出代码模板示例代码

    前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...

  5. 运维linux脚本实例,Shell脚本使用示例

    目录如下: 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小. 2.编写脚本/root ...

  6. python测网速_使用Linux命令行测试网速(示例代码)

    当发现上网速度变慢时,人们通常会先首先测试自己的电脑到网络服务提供商(通常被称为"最后一公里")的网络连接速度.在可用于测试宽带速度的网站中,Speedtest.net也许是使用最 ...

  7. linux命令拉取windows的文件,find命令、文件名后缀以及Linux和Windows互传文件(示例代码)...

    find命令 文件查找: 1.which(一般用于查找命令的绝对路径) 2.whereis(不常用) 3.locate(非实时查找,基于预先定义的数据库.模糊查找,查找速度快.使用前要先安装这个命令y ...

  8. 初学linux系统代码,linux初学者-系统日志(二)(示例代码)

    先前在(一)中介绍到在不同主机间日志同步的方法,在一台主机上可以看到另一台主机的日志.这里会介绍系统日志方面的一些其他内容. 1.日志的采集格式 在日志的采集中,由图可以看出,这样的排列或者显示方式会 ...

  9. 端口映射工具linux,Linux下端口映射工具rinetd(示例代码)

    Linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载 wget http://www.boutell.com ...

最新文章

  1. 《Cortex-M0权威指南》之体系结构---异常和中断
  2. Python Django模板templates渲染及配置
  3. [z]IE6各种不兼容问题
  4. html使用js的变量_JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器
  5. 重学java基础第十二课:计算机语言发展史
  6. Android逆向笔记-使用Android Killer修改包名Android系统安装相同应用
  7. 网络编程—代码—TCP网络传输
  8. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字
  9. Python3数据结构总结(列表list,元组tuple,集合set,字典dict,堆栈stack,队列queue和遍历技巧)
  10. Mozilla Firefox 7.0 发布
  11. 【Java例题】2.5 温度转换
  12. Chrome最新版本如何通过JS设置支持自动播放音频
  13. CISSP考点拾遗——关于道德
  14. 【论文】论文中的参考文献:国标GB/T 7714-2015文献类型与格式
  15. 今天是2019年最后一天,全球金融危机,离我们已经过去十年了
  16. OMNET随笔(初学感悟)
  17. AUTOSAR 诊断协议栈介绍
  18. DOS命令----百度百科
  19. HTML 鼠标点击复制元素内容
  20. d3 制作条形图_停止错误制作条形图的5个技巧

热门文章

  1. 事业单位考试高频考点二:经济
  2. 贺利坚老师汇编课程55笔记:带借位减法指令SBB
  3. 在Linux系统上安装Spring boot应用
  4. salt一键部署jdk
  5. HaspMap的新奇用法
  6. jQuery三天复习.md
  7. WPF:在XmlDataProvider上使用主-从绑定(Master-Detail Binding)
  8. Oracle logmnr使用
  9. Robocode教程4——Robocode的游戏物理
  10. 不可磨灭的记忆 CPU发展史经典回顾