执行流程

Posted binaryant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行流程相关的知识,希望对你有一定的参考价值。

分支流程之switch

  语法没什么好说的,如果你不懂我就给你举一个例子,你面前有一排门,每一个门都有一个第一无二的编号,门后面有妹子,现在让你选择

技术图片

 

  switch(你选择几号门?)

    case 1号门:

      ...妹子1

    break;

     case 2号门:

      ...妹子 2

    break;

    default:  //这里是注释,当你不选时,默认选择这扇门

      ..妹子3

    ;

  

   好了,switch大致意思是这样。下面讨论switch实现原理

  技术图片这里是99乘法表的一部分,我分别对他编号,当我说0的时候你应该知道1x1=1的内容。我说2的时候你应该知道1x2=2的内容。这里原理应该比较好理解吧?

技术图片现在我同样对case里面的代码也进行了编号,当switch( 这里应该是一个变量 )  变量的值等于1时执行代码块1,变量的值等于2时执行代码块2

你可以这样理解,代码也是在内存中的,当我知道代码块1、2、3的首地址后,使用一个数组保存他们的地址,当访问下标(编号)0时,其实就得到了代码块1的首地址。2同理

下面的分析代码

  情况一:

 switch (n) 
    case 1: 
        puts("代码块1");
    break;
    case 2: 
        puts("代码块2");
    break;
    default: 
        puts("代码块3");
    
    

 

 技术图片

1. 为 n开辟一块栈空间
2. 判断n-1是否相等,相等条件满足执行跳转
3. 判断n-2是否相等,相等条件满足执行跳转
4. 默认情况

 

情况二:

    switch (n) 
    case 1: 
        puts("代码块1");
    break;
    case 2: 
        puts("代码块2");
    break;
    case 3: 
        puts("代码块3");
    break;
    case 4: 
        puts("代码块3");
    break;
    default: 
        puts("代码块x");
    
    

  技术图片

1. 为switch(x)的x开辟一块栈空间
2. x-CASE中的最小值,得到一个差值,该差值是一个编号
3. 利用第2.步计算的差值和CASE中的最大值-最小值比较,如果大于那么说明不属于编号范围
4. 利用编号查询跳转地址

情况3:

 switch (n) 
    case 57: 
        puts("代码块1");
    break;
    case 2: 
        puts("代码块2");
    break;
    case 3: 
        puts("代码块3");
    break;
    case 4: 
        puts("代码块3");
    break;
    default: 
        puts("代码块x");
    
    

  技术图片

1. 和上面情况一样,这里不同的是,设置的二张表,表的关系的一对多

 

未完,待续。

以上是关于执行流程的主要内容,如果未能解决你的问题,请参考以下文章

Spring mvc执行流程图-1

AOP执行流程

Dubbo-发布服务执行的流程

HTTPS执行流程解析

python学习之内部执行流程,内部执行流程,编码

一文搞定 Flink Task 提交执行全流程