C语⾔中switch的查实现原理
我们在学习C语⾔的switch语句的时候,是否有思考过,switch在底层是如何⼯作的?那么我们现在来看看switch的底层⼯作⽅式。1. if…else结果的查
当case语句是⼩于3句的时候,switch语句底层的实现和if…else的实现⽅式相同。
2. 线性查
switch的用法c语言当case语句⼤于等于4的时候,且每两个case之间产⽣的间隔之和不超过6时,就按线性结构查。即,如下图的汇编⾥⾯的jmp dword ptr [edx*4+11B1428h]该指令⾥⾯的11B1428h地址⾥⾯,其存放着各个case语句的⾸地址。由于内存中下标是从0开始的,因此,通过对其进⾏减⼀操作,在判断其是否⼤于1
1B1428h地址的数组长度,如果⼤于直接跳出,否则通过计算直接定位到该数组上的地址进⾏跳转。
3. 树形查
当最⼤case值和最⼩case值之差⼤于255的情况下,此时,编译器会采⽤树形查。即,将数据由⼩到⼤排列,并取中间值(如果是偶数,就取中间两个靠右的那⼀个),在左右两边继续取中间值划分(左右两边划分不需要将中间值算进去),直到⼩于等于3个数据的时候不在划分。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论