对内存空间地址各层理解

对内存空间地址各层理解

ID:33482273

大小:123.50 KB

页数:12页

时间:2019-02-26

对内存空间地址各层理解_第1页
对内存空间地址各层理解_第2页
对内存空间地址各层理解_第3页
对内存空间地址各层理解_第4页
对内存空间地址各层理解_第5页
资源描述:

《对内存空间地址各层理解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、内存分配的原理__Linux虚拟内存管理(glibc)_Linux的虚拟内存管理有几个关键概念_Linux虚拟地址空间如何分布_malloc和free是如何分配和释放内存_如何查看堆内内存的碎片情况_既然堆内内存brk和sbrk不能直接释放,为什么不全部使用mmap来分配,munmap直接释放呢  2013-02-1821:03:06

2、  分类: Linux系统编程

3、举报

4、字号 订阅Linux虚拟内存管理(glibc)       在使用mysql作为DB开发的兑换券系统中,随着分区表的不断创建,发现mysqld出

5、现了疑似“内存泄露”现象,但通过valgrind等工具检测后,并没发现类似的问题(最终原因是由于glibc的内存碎片造成)。 因此,需要深入学习Linux的虚拟内存管理方面的内容来解释这个现象;Linux的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如

6、果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。    基于以上认识,进行了如下分析:一、Linux虚拟地址空间如何分布?Linux使用虚拟地址空间,大大增加了进程的寻址空间,由低地址到高地址分别为: 1、只读段:该部分空间只能读,不可写;(包括:代码段、rodata段(C常量字符串和#define定义的常量) )2、数据段:保存全局变量、静态变量的空间; 3、堆:就是平时所说的动态内存,malloc/new大部分都来源于此。其中堆顶的位置可通过函数brk和sbrk进行动态调整。 4、文件映射区域

7、:如动态库、共享内存等映射物理空间的内存,一般是 mmap函数所分配的虚拟地址空间。 5、栈:用于维护函数调用的上下文空间,一般为8M,可通过ulimit–s查看。 6、内核虚拟空间:用户代码不可见的内存区域,由内核管理(页表就存放在内核虚拟空间)。下图是32位系统典型的虚拟地址空间分布(来自《深入理解计算机系统》)。 32位系统有4G的地址空间::      其中0x08048000~0xbfffffff是用户空间,0xc0000000~0xffffffff是内核空间,包括内核代码和数据、与进程相关的数据结构(如

8、页表、内核栈)等。另外,%esp执行栈顶,往低地址方向变化;brk/sbrk函数控制堆顶_edata往高地址方向变化。64位系统结果怎样呢?64位系统是否拥有2^64的地址空间吗? 事实上,64位系统的虚拟地址空间划分发生了改变: 1、地址空间大小不是2^32,也不是2^64,而一般是2^48。因为并不需要2^64这么大的寻址空间,过大空间只会导致资源的浪费。64位Linux一般使用48位来表示虚拟地址空间,40位表示物理地址,这可通过/proc/cpuinfo来查看 addresssizes  :40bitsph

9、ysical,48bitsvirtual 2、其中,0x0000000000000000~0x00007fffffffffff表示用户空间,0xFFFF800000000000~0xFFFFFFFFFFFFFFFF表示内核空间,共提供256TB(2^48)的寻址空间。这两个区间的特点是,第47位与48~63位相同,若这些位为0表示用户空间,否则表示内核空间。 3、用户空间由低地址到高地址仍然是只读段、数据段、堆、文件映射区域和栈; 二、malloc和free是如何分配和释放内存?参看博客:http://blog.1

10、63.com/xychenbaihu@yeah/blog/static/132229655201210975312473/ 三、如何查看堆内内存的碎片情况 ?glibc提供了以下结构和接口来查看堆内内存和mmap的使用情况。 structmallinfo{  intarena;           /*non-mmappedspaceallocatedfromsystem*/  intordblks;       /*numberoffreechunks*/  intsmblks;         /*number

11、offastbinblocks*/  inthblks;            /*numberofmmappedregions*/  inthblkhd;          /*spaceinmmappedregions*/  intusmblks;       /*maximumtotalallocatedspace*/  intfsmblks;    

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。