欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《存储器和指针》PPT课件.ppt

    • 资源ID:80462871       资源大小:330KB        全文页数:27页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《存储器和指针》PPT课件.ppt

    存储器和指针(Memory&Pointer)罗海波嵌入精彩生活目录n存储器,依旧是存储器n指针是个等待降服的魔鬼n内存陷阱n动态内存分配算法及其代码示例嵌入精彩生活堆栈n4种不同的堆栈组织形式(P141)n堆栈的作用:q传递函数调用的参数q保存函数调用的返回地址q保存在被调函数中需要使用的寄存器的值q实现局部变量嵌入精彩生活调用栈帧和中断栈帧 最后一个参数 入口参数 函数返回地址 局部变量 局部变量 保存的调用函数的寄存器值 中断返回地址 程序状态字 局部变量 保存的中断前所用到的寄存器 调用栈帧结构中断栈帧结构Q:1.如何理解这两个栈帧结构?2.调用子函数时,子函数内部如何访问局部变量和入口参数?3.函数调用返回时,SP指针会发生什么?4.为何中断栈帧没有参数传递?嵌入精彩生活任务栈空间在使用时注意!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”;main()f(b);void f(char a)/数组作为参数数组作为参数 char c;a+;c=a0;/c=?sizeof(a)=?sizeof(b)=?嵌入精彩生活指针&字符串n下面两者的区别?q1:char*p=“hello,world!”;q2:char a =“hello,world!”;n上面两者的“hello,world!”内容分别存储在哪里?n是否可以修改p和a指向的内容?np指向别处后,“hello,world!”会不会丢失?n符号名和符号表嵌入精彩生活指针&函数nint(*fp)(int)int*fp(int)nint*(*fp_array10)(int)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 中:例如 Win32 的 CreateThread(.pF.)。n回调(call-back):所谓的回调机制就是:当发生某事件时,自动呼叫某 段程序代码。事件驱动(event-driven)的系统经常透过函数指针来实现 回调机制,例如 Win32 的 WinProc 其实就是一种回调,用来处理窗口的 讯息。嵌入精彩生活多态举例嵌入精彩生活多态举例Q:OS如何实现应用程序和驱动程序之间的对接,又便于如何实现应用程序和驱动程序之间的对接,又便于为应用程序提供统一的为应用程序提供统一的API操作接口,又能区别不同的操作接口,又能区别不同的硬件设备?硬件设备?嵌入精彩生活回调(call-back)n回调 由OS调用用户编写的函数,或者由底层函数调用上层函数。简言之,服务提供者调用了服务使用者实现的函数。nP125嵌入精彩生活多线程n构建多任务、注册一个新的任务nP127嵌入精彩生活内存陷阱n程序员能从哪些地方(通过哪些方式)获取存储空间?高段空闲空间栈(stack)堆(heap)全局数据区(静态区)代码段中断向量表和其他空间嵌入精彩生活局部变量(栈 or 寄存器)嵌入精彩生活嵌入精彩生活C编程中关于局部变量的处理的注意事项n对临时变量的取地址操作可能会无效。n不要返回临时变量的地址或临时指针变量。n不要申请太大的临时变量数组。嵌入精彩生活动态内存区(堆heapmalloc,free)n1.避免申请空间不足q某个矩形区域具有x*y个像素点,每个像素点2bit编码,该申请多大的内存保存该区域数据?n2.内存泄露(申请了木有释放)嵌入精彩生活内存泄露n3 reasons:qreturn前忘了释放前面申请的内存。q互相扯皮(A申请了给B用,B木有释放)qfree不成功(这个问题有点头大)。嵌入精彩生活example for:free不成功嵌入精彩生活how to avoid memory leakagen1.malloc了就应该要释放。n2.注意保存malloc返回的指针,避免free失败。n3.小心数据溢出,从而擦除掉别人的free头部。n4.不要扯皮:谁申请谁释放,谁污染谁治理。嵌入精彩生活野指针n3 reasons:q指针在初始化之前就引用。q某指针所指向的内存空间已释放,但仍然引用。n一个好的习惯是:free后显式的将指针赋值NULLq返回局部变量的地址。嵌入精彩生活内存陷阱总结n几个方面:q内存的分配不足q内存泄露(内存不足)q野指针(指针瞎访问)n如何避免动态内存的内存陷阱?qP137嵌入精彩生活函数利用指针来传递参数n包括利用指针传入数据和传出数据。n如果传入数据时,约定数据只读,则用const来修饰该指针形参。n请自行阅读P137 P140代码嵌入精彩生活动态内存分配算法及举例n问题的提出:q能分配合适大小的动态内存区,并返回首指针。q如果没有足够的内存,则返回NULL。q可调用free函数释放归还。q效率尽可能高并减少内存碎片。嵌入精彩生活分配嵌入精彩生活释放

    注意事项

    本文(《存储器和指针》PPT课件.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开