版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、存储器和指针(Memory & Pointer)罗海波robhappyqq嵌入精彩生活目录n存储器,依旧是存储器n指针是个等待降服的魔鬼n内存陷阱n动态内存分配算法及其代码示例嵌入精彩生活堆栈n4种不同的堆栈组织形式P141)n堆栈的作用:n传递函数调用的参数n保存函数调用的返回地址n保存在被调函数中需要使用的寄存器的值n实现局部变量嵌入精彩生活调用栈帧和中断栈帧 最后一个参数 入口参数 函数返回地址 局部变量 局部变量 保存的调用函数的寄存器值 中断返回地址 程序状态字 局部变量 保存的中断前所用到的寄存器 调用栈帧结构中断栈帧结构Q:如何理解这两个栈帧结构?调用子函数时,子函数内部
2、如何访问局部变量和入口参数?函数调用返回时,SP指针会发生什么?为何中断栈帧没有参数传递?嵌入精彩生活任务栈空间在使用时注意!n定义函数和ISR中的局部变量,特别是定义大型数组和数据结构时。n函数的嵌套与递归的深度。n中断嵌套的深度n库函数需要的栈空间可以采用高水位计的方法调试出任务所需要的栈空间大小。可以采用高水位计的方法调试出任务所需要的栈空间大小。嵌入精彩生活指针 & 数组int a10;int *p;p = a;a+; /ok?p+; /ok?printf(“%dn”,sizeof(a);printf(“%dn”,sizeof(p);char b10 = “123456789”
3、;main() f(b);void f(char a ) /数组作为参数数组作为参数 char c; a +; c = a0; /c=? sizeof(a)=?sizeof(b) = ?嵌入精彩生活指针 & 字符串n下面两者的区别?n1: char* p = “hello,world!”; n2: char a = “hello,world!”;n上面两者的“hello,world!”内容分别存储在哪里?n是否可以修改p和a指向的内容?np指向别处后,“hello,world!”会不会丢失?n符号名和符号表嵌入精彩生活指针 & 函数nint (*fp)(int) int * f
4、p(int)nint* (*fp_array10)(int) n int* fp_array10(int)int* myfunction(int);int* (*fp)(int);int* ptr;fp = myfunction;ptr = (*fp)(3);ptr = fp(4);恐惧!恐惧!(* (void (*)(void) 0)( );嘛意思?嘛意思?嵌入精彩生活函数指针的作用n多态 (polymorphism):指用一个名字定义不同的函数,这函数执行不同但 又类似的操作,从而实现“一个接口,多种方法”。n多线程 (multithreading):将函数指针传进负责建立多线程的 API
5、 中:例如 Win32 的 CreateThread(.pF.)。n回调 (call-back):所谓的回调机制就是:当发生某事件时,自动呼叫某 段程序代码。事件驱动 (event-driven) 的系统经常透过函数指针来实现 回调机制,例如 Win32 的 WinProc 其实就是一种回调,用来处理窗口的 讯息。 嵌入精彩生活多态举例嵌入精彩生活多态举例Q:OS如何实现应用程序和驱动程序之间的对接,又便于如何实现应用程序和驱动程序之间的对接,又便于为应用程序提供统一的为应用程序提供统一的API操作接口,又能区别不同的操作接口,又能区别不同的硬件设备?硬件设备?嵌入精彩生活回调call-bac
6、k)n回调 由OS调用用户编写的函数,或者由底层函数调用上层函数。简言之,服务提供者调用了服务使用者实现的函数。nP125嵌入精彩生活多线程n构建多任务、注册一个新的任务nP127嵌入精彩生活内存陷阱n程序员能从哪些地方通过哪些方式获取存储空间?高段空闲空间栈stack)堆heap)全局数据区静态区)代码段中断向量表和其他空间嵌入精彩生活局部变量栈 or 寄存器)嵌入精彩生活嵌入精彩生活C编程中关于局部变量的处理的注意事项n对临时变量的取地址操作可能会无效。n不要返回临时变量的地址或临时指针变量。n不要申请太大的临时变量数组。嵌入精彩生活动态内存区堆heapmalloc,free)嵌入精彩生活
7、内存泄露嵌入精彩生活example for : free不成功嵌入精彩生活how to avoid memory leakagen1. malloc了就应该要释放。n2. 注意保存malloc返回的指针,避免free失败。n3. 小心数据溢出,从而擦除掉别人的free头部。n4. 不要扯皮:谁申请谁释放,谁污染谁治理。嵌入精彩生活野指针n3 reasons:n指针在初始化之前就引用。n某指针所指向的内存空间已释放,但仍然引用。n一个好的习惯是:free后显式的将指针赋值NULLn返回局部变量的地址。嵌入精彩生活内存陷阱总结n几个方面:n内存的分配不足n内存泄露内存不足)n野指针指针瞎访问)n如何避免动态内存的内存陷阱?nP137嵌入精彩生活函数利用指针来传递参数n包括利用指针传入数据和传出数据。n如果传入数据时,约定数据只读,则用const来修饰该指针形参。n请自行阅读P137 P1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年标准化四害防治管理合同二篇
- 企事保密法考试题及答案
- 2026东莞市专职消防员招聘考试题及答案
- 2026德州市专职消防员招聘面试题及答案
- 2026大连市护士招聘考试题及答案
- 诚实守信行动方案承诺书6篇范文
- 物联网智能家居系统部署方案
- 2026承德市护士招聘考试题及答案
- 护理不良事件主动报告奖惩
- 胰岛素注射规范操作全指南解读课件
- 2026公司级新员工安全培训教材
- 配电架空线路标准施工工艺课件
- 医疗器械网络经营培训
- 足浴按摩店卫生管理制度
- 艾滋病知识防治培训课件
- 《生活中的人工智能》课件
- 2025年五类人员考试真题及答案
- 断绝姐妹关系协议书
- 2026年物流配送数字化方案与企业配送效率提升指南
- 5年(2021-2025)山东高考生物真题分类汇编:专题13 种群和群落(解析版)
- 电厂工程取水口施工方案
评论
0/150
提交评论