嵌入式C编程 02_存储类型和内存管理

上传人:ji****72 文档编号:48609606 上传时间:2018-07-18 格式:PPT 页数:27 大小:1.22MB
返回 下载 相关 举报
嵌入式C编程 02_存储类型和内存管理_第1页
第1页 / 共27页
嵌入式C编程 02_存储类型和内存管理_第2页
第2页 / 共27页
嵌入式C编程 02_存储类型和内存管理_第3页
第3页 / 共27页
嵌入式C编程 02_存储类型和内存管理_第4页
第4页 / 共27页
嵌入式C编程 02_存储类型和内存管理_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《嵌入式C编程 02_存储类型和内存管理》由会员分享,可在线阅读,更多相关《嵌入式C编程 02_存储类型和内存管理(27页珍藏版)》请在金锄头文库上搜索。

1、存储类型和内存管理课程安排n程序内存映像n变量存储类型n函数作用域n动态内存分配程序映像布局1、静态映像(可执行文件):TEXT段、DATA段、BSS段;2、动态映像(可执行文件运行):lBSS段消失l增加堆和栈1、TEXT:保存指令代码、立即数等只读信息,函数地址就在该段中分配2、DATA:保存已初始化全局变量、静态变量。其中又分为RODATA,保存字符串常量等只读数据3、BSS:记录未初始化全局变量、静态变量的标号的内存大小,程序运行后为这里数据在DATA段分配内存并初始化为04、堆:保存临时动态分配内存5、栈:保存临时静态分配内存内存映像定义1、2、3、4、变量影响程序映像大小课程安排n

2、程序内存映像n变量存储类型n函数作用域n动态内存分配变量内存分配方式1、静态分配:在程序执行时由系统自动分配,使用完毕后由系统自动回收根据类型大小自动在数据段、栈分配静态内存好处是不存在内存泄露问题,但静态分配的内存有限2、动态分配:需要在代码中手动分配,使用完毕后必须在代码中手动回收根据运行时的要求在堆上分配动态内存好处是能动态分配很大的内存,但一旦忘记回收,内存泄露严重影响系统性能静态分配变量最常用的变量使用方式是静态分配变量要使用静态分配的变量必须评估变量两方面属性:1、变量生存期:生存期就是变量的存储空间从建立到被收回的一段时期。生存期内才为变量分配内存!2、变量作用域变量的作用域也称

3、为可见性,是指变量能访问到的范围。在有效作用域内,变量必须是唯一的!变量生存期1、临时生存期:在栈上分配内存在函数执行时为变量分配内存,函数执行结束回收内存生存期是从进入函数起,到退出函数时结束2、永久生存期:在数据段分配内存在程序开始执行时为变量分配内存,程序结束回收内存生存期是从进入程序起,到退出程序时结束变量作用域1、函数(程序块)内:定义在函数(程序块)之内,只能在该函数(程序块)中使用2、模块(文件)内:定义在函数之外,能被该文件内的所有函数使用(使用之前变量必须先定义)3、模块(文件)间:定义在函数之外,可以被整个程序所有文件的所有函使用(使用之前变量必须先定义)1、局部变量: a

4、uto关键字修饰(可省略),定义在函数之内 栈上分配,临时生存期,作用在函数内2、全局变量:慎用带extern关键字修饰(可省略),定义在函数外数据段分配,永久生存期,作用在模块间其他模块的函数引用时习惯带extern关键字声明3、静态局部变量:带static关键字修饰,定义在函数之内数据段分配,永久生存期,作用在函数内4、静态全局变量:用static关键字修饰,定义在函数之外数据段分配,永久生存期,作用在模块内变量存储类型局部静态变量使用示例全部静态变量使用示例全部变量使用示例变量只能被定义一次,但可以被多次声明引用1、auto:声明或定义自动变量,该关键字可省略2、extern: 声明或定

5、义外部存储变量定义时关键字可省略3、static:声明或定义静态变量4、register: 声明或定义寄存器变量(已经很少使用)告诉编译器,尽量把变量定义为寄存器变量,当CPU无多余寄存器可用时,编译器自动将其作为自动变量处理存储类型说明符课程安排n程序内存映像n变量存储类型n函数作用域n动态内存分配在TEXT段(代码段)为函数体分配内存函数名代表函数体的首地址函数的生存期都贯穿整个程序执行期函数生存期1、模块内(静态函数):非接口函数只能被函数定义模块(文件)的函数调用通常函数声明和定义都在源文件内定义和声明函数时可用static关键字修饰,表示函数只在当前模块使用(也可省略)带static

6、关键字修饰的函数不要在头文件声明!2、模块间(全局函数):接口函数能所有模块(文件)的函数调用通常将函数声明在头文件,供其他模块引用定义和声明函数时用extern关键字修饰(可省略)函数作用域函数作用域声明示例static修饰的静态函数为内部函数,main.c中无法使用只有全局函数才能作为接口函数在头文件声明课程安排n程序内存映像n变量存储类型n函数作用域n动态内存分配l在数据段或者栈上分配内存属于静态分配方式好处:1、简单易用,内存分配和回收由系统自动完成特点:1、编译时必须明确变量所需要的内存空间2、所需的内存空间过大,可能到时内存分配失败!静态内存分配C程序结构栈上分配过大系统为运行程序

7、使用的栈容量很有限!如果需要的内存空间,要到程序运行时才能根据实际情况确定或者需要分配一个大内存池-这时可以用动态内存分配动态内存在堆上分配,特点是需要手工分配,并且手工回收!动态内存分配动态内存申请与释放动态分配得到的内存通过指针引用!动态内存申请(malloc)与释放(free)必须配对!内存泄露动态内存申请malloc后不释放free, 系统不会自动回收动态内存就算程序退出后动态内存也一直被占用,造成内存泄露影响整个系统系统性能降低动态内存函数calloc :用于申请并初始化动态内存数组realloc: 用于重新调整已分配的动态内存大小上机实验1、有一组信息char msg = “数据交互”;在函数内定义,怎么交互给其他函数使用?在函数外定义,怎么在本模块交互使用?在函数外定义,怎么在模块间交互使用?2、根据学生个数为学生信息表申请动态内存

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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