嵌入式开发教程之linux进程与它的堆栈空间ppt课件

上传人:我*** 文档编号:148571514 上传时间:2020-10-21 格式:PPTX 页数:10 大小:60.79KB
返回 下载 相关 举报
嵌入式开发教程之linux进程与它的堆栈空间ppt课件_第1页
第1页 / 共10页
嵌入式开发教程之linux进程与它的堆栈空间ppt课件_第2页
第2页 / 共10页
嵌入式开发教程之linux进程与它的堆栈空间ppt课件_第3页
第3页 / 共10页
嵌入式开发教程之linux进程与它的堆栈空间ppt课件_第4页
第4页 / 共10页
嵌入式开发教程之linux进程与它的堆栈空间ppt课件_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《嵌入式开发教程之linux进程与它的堆栈空间ppt课件》由会员分享,可在线阅读,更多相关《嵌入式开发教程之linux进程与它的堆栈空间ppt课件(10页珍藏版)》请在金锄头文库上搜索。

1、嵌入式开发教程之linux进程与它的堆栈空间,一)概述 二)进程的内存组织形式 1)文本区域: 2)数据区域: 3)堆栈区域: 4)内存的分配区域: 三)堆栈着色 四)堆栈的限制 五)常驻内存和锁定内存,.堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储. .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说,内存是自动分配和释放的. .C/C+把存储在堆栈中的局部变量当作automatic存储,并使用auto关键字,这是局部变量的默认存储方式,所以现在没有人用auto关键词. .与动态存储相对映的静态存储,也

2、就是用static定义的局部变量,它不用堆栈来存储,而是使用数据段来存储. .堆栈的基地址位于用户空间的最高虚拟地址附近,并从那里向下延伸. .一个进程开始时,堆栈的最大值就不能改变,如果占用的空间超过了堆栈大小,那么就会导致堆栈溢出.,一)概述,进程被分为三个区域:文本,数据和堆栈.,二)嵌入式开发教程之进程的内存组织形式,文本区域也叫做代码段,是由程序确定的,它包括代码(指令)和只读数据,该区域通常被标记为只读,任何对其写入的操作会导致段错误.,1)嵌入式开发教程之文本区域,数据区域也叫做数据段,它包括已初始化和未初始化的数据,静态变量存储在这个区域中,它的大小可以用系统调用brk(2)来

3、改变.,2)嵌入式开发教程之数据区域,堆栈区域也叫堆栈段,它用于给局部变量动态分配空间,同样函数传递参数和函数返回值也要用到堆栈. 堆栈也可向下增长(向内存低地址)也可以向上增长,这依赖于具体的实现,通常都是向下增长的,而SP(堆栈指针)也是指向堆栈的最后地址.,3)嵌入式开发教程之堆栈区域,根据前面所述,堆栈是位于最高虚拟地址附近,而数据段则位于堆栈段之后,最后是代码段.,4)嵌入式开发教程之内存的分配区域,当两个线程或进程使用相同的堆栈虚拟地址时,它们会争夺同一个cache行,导致竞争和降级行为. 堆栈着色的技术使每一个进程的基址都不相同,通过随机分配堆栈基址,多个进程会使用不同的cach

4、e行来避免.,三)嵌入式开发教程之堆栈着色,堆栈空间的最大值是由setrlimit系统调用确定的,也可以通过bash内建的ulimit命令来设定和查看. 例如: 查看当前可使用的最大堆栈(以KB为单位) ulimit -s 8192 设定为最大的使用堆栈为15KB ulimit -s 15 此时执行ls将会得到一个段错误. ls -l /etc/,四)嵌入式开发教程之堆栈的限制,total 1040 Segmentation fault 通过用strace跟踪ls命令,将发现有如下的系统调用 getrlimit(RLIMIT_STACK, rlim_cur=15*1024, rlim_max=15*1024) = 0 说明当前可用的堆栈空间,已经不足以运行strace命令了. 五)常驻内存和锁定内存 常驻内存专指存储在RAM中的内存部分,不包括存储在交换区和未存储的进程的内存. 锁定内存是常驻内存的子集,它指被进程明确地锁定到RAM的虚拟内存中,不能用于交换,并一直常驻于RAM中.,嵌入式开发教程,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号