科锐课堂笔记:2017/2/27 IDE环境使用与switch实现机制

  有关计算机中基本算法的具体实现(加减乘除等)可参见《计算机程序设计艺术》一书。


  VC6 IDE环境使用简介:
  文件视图列出的是要编译的文件,类视图列出所有全局变量、类及函数。.dsp是工程文件,.dsw是工作空间,.ncb其他杂信息,.pdb调试符号信息。
  VC6中的快捷键:
  F7编译并链接工程,Ctrl+F7仅编译当前文件。F5调试运行,Ctrl+F5直接运行。F9设置或取消断点,Ctrl+F10断点到当前行,F10单步过,F11单步进,Shift+F11单步出。调试状态下,Ctrl+3调出监视窗口(可用运算符,不能使用函数),Ctrl+5调存器,Ctrl+6内存,Ctrl+7堆栈调用,Ctrl+8查看汇编代码。


  多重循环中跳出可用goto。


  switch机制分析:

  情况1(case分支小于或等于3个),如图:
 
  进调试看汇编代码见图:
 
  以上图可知,此时编译器对switch的处理并未做优化,VC6的编译结果是把i值取出赋值到一个临时变量里,分别与值1、2、3做比较,如果等于则跳转到相应的处理代码,如果都没有跳转到default处,有点类似于下面的if-else:

if(1 == i) {
    // case 1:
} else if(2 == i) {
    // case 2:
} else if(3 == i) {
    // case 3:
} else {
   // default:
}
  但switch与if-else最大不同是它所有的分支判断代码在一处,各分支执行代码又集中在另一处,一般的每个case中都应加上break以跳出流程,否则程序将顺序向下执行代码。


  情况2(case分支大于3个且有基本连续值),如图:
 
  其调试汇编代码如图:
 
  很明显,此时编译器对switch已做了优化处理,具体流程先把i取出赋值到临时变量里,减去case的最小值(此例减-2=加2),这样该变量就是一个以0为起始的数组下标,接着判断一下此下标是否越界(大于6则跳转到default处)。这个例子里从-2到4,共有7项,其中-2、1、3、4有自己的处理代码,-1、0、2编译器自动链接到default处。上面讲的数组其实就是一个case分支地址表,每个表项都指向一个case分支地址,从小到大排列,上例中分支地址表在40F03Ch处,看一下其值:
 
  完全应正了我们的推论。


  情况3(case分支大于3个且值跳跃不连续)
  对情况3的处理和情况1差不多,也是做判断跳转,但编译器会做一些优化,像大于小于如此,尽量使得判断次数最优最少。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值