《最新存储器和指针PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新存储器和指针PPT课件.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、存储器和指针存储器和指针嵌入精彩生活目录n存储器,依旧是存储器n指针是个等待降服的魔鬼n内存陷阱n动态内存分配算法及其代码示例嵌入精彩生活嵌入精彩生活嵌入精彩生活嵌入精彩生活嵌入精彩生活嵌入精彩生活嵌入精彩生活函数指针的作用n多态(polymorphism):指用一个名字定义不同的函数,这函数执行不同但 又类似的操作,从而实现“一个接口,多种方法”。n多线程(multithreading):将函数指针传进负责建立多线程的 API 中:例如 Win32 的 CreateThread(.pF.)。n回调(call-back):所谓的回调机制就是:当发生某事件时,自动呼叫某 段程序代码。事件驱动(e
2、vent-driven)的系统经常透过函数指针来实现 回调机制,例如 Win32 的 WinProc 其实就是一种回调,用来处理窗口的 讯息。嵌入精彩生活多态举例嵌入精彩生活多态举例Q:OS如何实现应用程序和驱动程序之间的对接,又便于如何实现应用程序和驱动程序之间的对接,又便于为应用程序提供统一的为应用程序提供统一的API操作接口,又能区别不同的操作接口,又能区别不同的硬件设备?硬件设备?嵌入精彩生活回调(call-back)n回调 由OS调用用户编写的函数,或者由底层函数调用上层函数。简言之,服务提供者调用了服务使用者实现的函数。nP125嵌入精彩生活多线程n构建多任务、注册一个新的任务nP
3、127嵌入精彩生活内存陷阱n程序员能从哪些地方(通过哪些方式)获取存储空间?高段空闲空间栈(stack)堆(heap)全局数据区(静态区)代码段中断向量表和其他空间嵌入精彩生活局部变量(栈 or 寄存器)嵌入精彩生活嵌入精彩生活C编程中关于局部变量的处理的注意事项n对临时变量的取地址操作可能会无效。n不要返回临时变量的地址或临时指针变量。n不要申请太大的临时变量数组。嵌入精彩生活动态内存区(堆heapmalloc,free)n1.避免申请空间不足q某个矩形区域具有x*y个像素点,每个像素点2bit编码,该申请多大的内存保存该区域数据?n2.内存泄露(申请了木有释放)嵌入精彩生活内存泄露n3 r
4、easons: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效率尽可能高并减少内存碎片。嵌入精彩生活分配嵌入精彩生活释放