开源代码分析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《开源代码分析课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 源代码 分析 课件
- 资源描述:
-
1、开源代码分析C/C+语言介绍语言介绍1C/C+的实现nC/C+在现代数字计算机上的实现n各种语法映射到实际硬件实现n高效地实现语言的各项特性n提供一定的资源管理能力n提供方便开发的工具、库2C/C+的实现n平坦地址空间模型n所有数据、代码共享一个地址空间n便于操作系统管理和分配内存n程序需要存储哪些信息?n函数n各个函数的指令n数据n全局变量,静态变量,局部(自动)变量n动态分配的存储空间,函数调用信息n如何实现这些功能和信息?n必须要清楚各自的功能和特点3C/C+的实现n局部(自动)变量n仅在定义变量的函数被调用时存在n当函数被递归调用时,可有多个不同变量float pow(float x,
2、int n)if(n=1)return x;if(n=0)return 1;int t=n/2;return pow(x,t)*pow(x,n-t);pow(0.5,3)void main()pow(0.5,5);main()x=?n=?t=?x=0.5 n=3 t=1pow(0.5,1)pow(0.5,2)x=0.5 n=1 t=?x=0.5 n=2 t=1pow(0.5,1)pow(0.5,1)4C/C+的实现n全局变量n程序的整个生存周期都存在n常量和全局资源的管理数据const char*FlagToName=“create”,“open”,“append”;同步地把Root换成thi
3、s(多线程安全)volatile:如一个变量可能被多个线程修改,应定义为volatilethis:C+成员函数中指向当前对象的指针5C/C+的实现n静态变量n程序的整个生存周期内存在n当函数被递归调用时,也仅有一个变量float pow(float x,int n)static int entryCount=0;entryCount+;void main()pow(0.5,5);pow(0.5,3)main()entryCount=0entryCount=1pow(0.5,1)pow(0.5,2)entryCount=2entryCount=3pow(0.5,1)pow(0.5,1)大多数静态
4、变量可以用类变量代替6C/C+的实现n可重入和不可重入代码n可重入n多个线程调用同一个函数,结果不会出问题n可能影响重入的因素n使用全局变量n使用静态局部变量n使用类成员变量n类成员函数一般是不可重入的!n调用了不可重入函数的函数可能是可重入的!n使用了除局部变量以外的任何变量7C/C+的实现n可重入和不可重入代码n不可重入代码不一定只影响多线程出现n如果大量使用全局变量,这些变量表征的对象在一个程序中只能有一个n把所有变量和函数封装成一个类即可解决car.cppchar*CarBrand=“Red Flag”;int CurSpeed=0;bool Start()8C/C+的实现n动态分配的
5、存储空间n生存周期由程序员控制n可能跨越函数,也可能仅跨越几条语句n函数调用信息(返回地址等)n与局部变量相同n函数n程序的整个生存周期内存在n与各种数据都很不相同n与常量有一定相似性9C/C+的实现n各种信息总结n程序的整个生存周期内存在n函数,全局变量,静态变量n仅在定义变量的函数被调用时存在n局部变量,函数调用信息n由程序员控制n动态分配的存储空间n各部分应分别管理,放置在地址空间的不同部位10C/C+的实现n程序在内存中的映象未映射空间函数数据栈操作系统的代码、数据00000000FFFFFFFF开始执行位置文件头函数1函数n_startupmain()call _maincall _
6、exit函数在内存的顺序并不重要全局和静态数据的实现没有区别防止空指针错误堆11C/C+的实现n栈n管理函数调用和返回,分配局部变量n为什么用栈?n函数可以递归调用n栈指针n指向栈顶部的指针n栈框架n一个函数的调用信息、局部变量等所有的信息Test()SFSPmain()SFGo()SFprintf()SF已分配空间未分配空间不能返回指向局部变量的指针或引用!12int*ptr()int y=3;return&y;main()int*SA,content;SA=ptr();content=*SA;printf(%d,content);/*?*/content=*SA;printf(%d,con
展开阅读全文