您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 03第03章 Linux进程存储管理
Linux高级程序设计(第2版)Linux高级程序设计(第二版)人民邮电出版社出版杨宗德编著2009年9月Linux高级程序设计(第2版)第3章Linux进程存储管理12Linux程序存储结构与进程结构ANSIC内存管理API函数3常用Linux内存管理及调试工具4Linux进程环境及系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著3二进制可执行文件Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著4可执行文件与进程存储布局可执行代码(代码区)已初始化全局变量、静态变量和常量数据(数据区)堆区(向上增长)栈区(向下增长)未初始化全局变量(BSS区,用零初始化)可执行代码(代码区)已初始化全局变量、静态变量和常量数据(数据区)未初始化变量(BSS区,用零初始化)高地址低地址可执行文件结构(用size查看)进程内存结构(未列出在内核申请的资源)Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著5各段说明•(1)代码区(textsegment)。加载的是可执行文件代码段,其加载到内存中的位置由加载器完成。•(2)全局初始化数据区/静态数据区(DataSegment)。加载的是可执行文件数据段,存储于数据段(全局初始化,静态初始化数据)的数据的生存周期为整个程序运行过程。•(3)未初始化数据区(BSS)。加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段,存储于数据段的数据(全局未初始化,静态未初始化数据)的生存周期为整个程序运行过程。•(4)栈区(stack)。由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。•(5)堆区(heap)。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著6C各存储类型比较Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著7栈和堆的区别•(1)管理方式不同。•(2)空间大小不同。•(3)产生碎片不同。•(4)增长方向不同。•(5)分配方式不同。•(6)分配效率不同。Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著8数据存储位置Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著9常见内存错误Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著10临时空间过大Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著11申请堆空间后未释放Linux高级程序设计(第2版)第3章Linux进程存储管理12Linux程序存储结构与进程结构ANSIC内存管理API函数3常用Linux内存管理及调试工具4Linux进程环境及系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著13malloc/free函数Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著14realloc更改已经配置的内存空间•第一个参数为试图更改大小的原堆空间位置,size为新的内存大小。•如果内存减少,malloc仅仅改变索引信息,但并不代表被减少的部分还可以访问,这一部分内存将交给系统内存分配子程序。•当需要扩大一块内存空间时,其返回情况如下:–如果当前内存段后面拥有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针;–如果当前内存段后面的空闲字节不够,那么就使用堆中第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。•如果申请失败,将返回NULL,此时原来指针仍然有效。Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著15内存数据管理函数Linux高级程序设计(第2版)第3章Linux进程存储管理12Linux程序存储结构与进程结构ANSIC内存管理API函数3常用Linux内存管理及调试工具4Linux进程环境及系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著17常用工具•mcheck函数•Valgrind内存检测工具Linux高级程序设计(第2版)第3章Linux进程存储管理12Linux程序存储结构与进程结构ANSIC内存管理API函数3常用Linux内存管理及调试工具4Linux进程环境及系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著19命令行参数管理argc=2argvargv[0]NULLls-lLinux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著20getopt获取命令行参数Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著21环境变量Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著22Linux系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著23Linux系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著24获取/修改系统限制Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著25Linux时间管理•UTC时间和LocalTime时间的区别:–UTC(UniversalTimeCoordinated)即GMT(GreenwichMeanTime)。–Localtime为本地时间。•系统默认的时区配置文件位置为/etc/sysconfig/clock:[root@localhost~]#cat/etc/sysconfig/clockZONE=Asia/ChongqingUTC=trueARC=falseLinux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著26时间管理函数Linux高级程序设计(第2版)2020/1/20人民邮电出版社出版杨宗德编著27localtime
本文标题:03第03章 Linux进程存储管理
链接地址:https://www.777doc.com/doc-3205104 .html