基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG
基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG,供各位网友参考 1、编译时出现递归警告,我看到很多网友都采用再入属性解决,对于再入函数,Keil C不对它进行覆盖分析,采用模拟栈来分配局部变量,对于data型的模拟栈,假设函数中如果用了x个变量,递归级数为y,那每调用一次递归函数就要使用(x+2)*y个堆栈空间,极易造成堆栈空间溢出,产生不可预知的错误。连汉诺塔问题都可以采用非递归算法实现,因此使用Keil C编程建议不要使用递归算法。 2、使用函数指针变量间接调用函数,以下几种情况会出现覆盖分析错误,但Keil C无法给出警告,产生不可预知的错误: A、给指针变量直接赋常数指,然后间接调用。 B、指针变量定义为全局变量,而赋值和调用分别在不同的函数。 C、函数指针作为参数传递。 出现以上情况时,连接时要使用overlay调整调用关系,但我个人觉得overlay命令使软件的可维护性变得很差,一般不建议使用此命令。建议函数指针定义为code类型,因为常数段有参与覆盖分析,但也有负作用,请看第3点。 3、函数指针定义为code类型时,在有些情况Keil C会给出递归警告,下面给出fun10到fun14五个范例进行分析 A、main中的第二句产生的递归调用很好处理,只要把fun10放到其他的OBJ中就可解决,因为这时table和"abcdefg"会在不同的常数段。 B、main中的第三句产生的递归调用可用main中第四句的方式解决。 C、main中的第五句产生的递归调用“不可以”采用main中第六句的方式解决,因为第六句就是第2点中的情况B,所以这两句只能用overlay命令解决。
基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG的更多相关文章
- Java中弹出对话框中的几种方式
1.显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", " ...
- 有些lambda表达式就可以体现出编程中「Context(上下文)」环境
编程中什么是「Context(上下文)」? 每一段程序都有很多外部变量.只有像Add这种简单的函数才是没有外部变量的.一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行.你为了使他们运行 ...
- 【转】基于DM8168的视频智能分析系统的设计方案
[导读] 为了实现高清视频的智能分析功能,本文介绍了一种以TI公司的DM8168为核心的高清视频智能分析系统的设计方案,该方案从硬件设计和软件设计两个方面介绍了硬件组成.工作流程.软件架构,并 ...
- KEIL C51代码优化详细分析
阅读了<单片机与嵌入式系统应用>2005年第10期杂志<经验交流>栏目的一篇文章<Keil C51对同一端口的连续读取方法>(原文)后,笔者认为该文并未就此问题进行 ...
- 基于GPU加速的三维空间分析【转】
基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益 ...
- 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化
高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...
- 基于goahead 的固件程序分析
# 前言 本文由 本人 首发于 先知安全技术社区: https://xz.aliyun.com/u/5274 最近在分析 dlink 的一个固件时遇到了用 goahead 开发的 web 服务.本文以 ...
- 第一次作业:基于Linux-0.12的进程分析
这次作业主要基于Linux-0.12的源代码,分析Linux是如何组织进程,进程的状态之间是如何转换,以及进程是如何调度的. 一. 进程的概念: 1.进程就是:程序在数据集合上的一次运行过程,是系统进 ...
- 基于 Spark 的文本情感分析
转载自:https://www.ibm.com/developerworks/cn/cognitive/library/cc-1606-spark-seniment-analysis/index.ht ...
随机推荐
- 编译型/解释型语言,什么时候用shell
编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将我们写好的源代码(source code)转换成目标代码(obje ...
- linux网址
1. 上海爱墨电子科技有限公司 http://www.shaimo.cn/showproduct.asp?piccat_id=196&pic_id=780 2. http://lxr.free ...
- 【czy系列赛】czy的后宫4 && bzoj1925 [Sdoi2010]地精部落
[问题描述] czy有很多妹子,妹子虽然数量很多,但是质量不容乐观,她们的美丽值全部为负数(喜闻乐见). czy每天都要带N个妹子到机房,她们都有一个独一无二的美丽值,美丽值为-1到-N之间的整数.他 ...
- 沙湖王 | 用Scipy实现K-means聚类算法
沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法
- C#实现下载功能,可用于软件自动更新
以前在百度写的文档,转移到此处 软件截图: 代码下载: http://twzy.ys168.com/ 在代码下载文件夹中 //代码: using System; using System.Comp ...
- extjs tree check 级联选择
extjs4 tree check 级联选择 实现效果: 关键代码: function changeAllNode(node, isCheck) { allChild(node, isCheck); ...
- Spring AOP应用实例demo
AOP(Aspect-Oriented Programming.面向方面编程).能够说是OOP(Object-OrientedPrograming.面向对象编程)的补充和完好.OOP引入封装.继承和多 ...
- Oracle监听静态注册和动态注册
静态注册和动态注册总结 一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名 ...
- NFinal ajax
AJAX返回 我们经常会用到ajax,当我们想返回json时,需要这样写. context.Response.ContentType="application/json"; con ...
- VS C# 嵌入互操作类型
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLSer ...