switch case 和 if else效率的比较

PCB之AD层次化原理图设计 PCB之AD层次化(模块化)原理图设计 软件版本:AD17.1.9(bBuild 592) 先上效果图: 可以看到,图中有RS485和W5500这两个部分是复用了原理图,当项目中需要多个功能相同的电路时,这种设计就可以大大节约PCB布局布线的时间,方法后面介绍; 1.首先确定好项目中个部分电路的功能模块 不同功能的电路分开不同原理图画,然后给出输入输出端口,这样方便复用,下面是实例项目的功能划分 2.单个模块电路的接口设计 这里以W5500以太网接口电路为例说明: 主要就分为通讯接口和电源接口: 阅读详情

昨天发现了一本叫做CSAPP的(9php.com)书,终于找到了关于switch问题的(9php.com)解答。
这是一段C代码:
/* $begin switch-c */
int switch_eg(int x)
{
    int result = x;

    switch (x) {

    case 100:
    result *= 13;
    break;

    case 102:
    result += 10;
    /* Fall through */

    case 103:
    result += 11;
    break;

    case 104:
    case 106:
    result *= result;
    break;

    default:
    result = 0;      
    }

    return result;
}
/* $end switch-c */

用GCC汇编出来的(9php.com)代码如下:
    .file    "switch.c"
    .version    "01.01"
gcc2_compiled.:
.text
    .align 4
.globl switch_eg
    .type     switch_eg,@function
switch_eg:
    pushl %ebp
    movl %esp,%ebp
    movl 8(%ebp),%edx
    leal -100(%edx),%eax
    cmpl ,%eax
    ja .L9
    jmp *.L10(,%eax,4)
    .p2align 4,,7
.section    .rodata
    .align 4
    .align 4
.L10:
    .long .L4
    .long .L9
    .long .L5
    .long .L6
    .long .L8
    .long .L9
    .long .L8
.text
    .p2align 4,,7
.L4:
    leal (%edx,%edx,2),%eax
    leal (%edx,%eax,4),%edx
    jmp .L3
    .p2align 4,,7
.L5:
    addl ,%edx
.L6:
    addl ,%edx
    jmp .L3
    .p2align 4,,7
.L8:
    imull %edx,%edx
    jmp .L3
    .p2align 4,,7
.L9:
    xorl %edx,%edx
.L3:
    movl %edx,%eax
    movl %ebp,%esp
    popl %ebp
    ret
.Lfe1:
    .size     switch_eg,.Lfe1-switch_eg
    .ident    "GCC: (GNU) 2.95.3 20010315 (release)"

在上面的(9php.com)汇编代码中我们可以很清楚的(9php.com)看到switch部分被分配了一个连续的(9php.com)查找表,switch case中不连续的(9php.com)部分也被添加上了相应的(9php.com)条目,switch表的(9php.com)大小不是根据case语句的(9php.com)多少,而是case的(9php.com)最大值的(9php.com)最小值之间的(9php.com)间距。在选择相应 的(9php.com)分支时,会先有一个cmp子句,如果大于查找表的(9php.com)最大值,则跳转到default子句。而其他所有的(9php.com)case语句的(9php.com)耗时都回事O(1)。

相比于if-else结构,switch的(9php.com)效率绝对是要高很多的(9php.com),但是switch使用查找表的(9php.com)方式决定了case的(9php.com)条件必须是一个连续的(9php.com)常量。而if-else则可以灵活的(9php.com)多。

 

转自 http://joehust.ycool.com/post.1692407.html

从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果 通过colmap进行的sfm的普通方式会丢失场景的物理尺度信息,并且并不在符合一般认知的坐标系下,本文将读取colmap生成的点云和相机pose,将其进行空间变换和缩放之后,重新保存,新保存的结果仍然可以被colmap读取以及进行后续的稠密重建以及3dgs等工作 阅读详情

相关推荐

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 755

C程序中如何知道一段代码的执行时间?

使用Linux系统time()、gettimeofday()函数以及 times()、clock()函数来获取一段代码的执行时间。

weixin_45389997的博客 6040

ESP32连接PDM麦克风操作指南:新手入门必看

手把手教你如何将ESP32与PDM麦克风连接,采集音频数据并用于音频分类应用。内容涵盖硬件接线、代码配置及实际调试技巧,适合初学者快速上手esp32在声音识别场景中的使用。

weixin_42590539的博客 1329

[C语言]if/else 与 ?:的时间比较

if/else 与 ?:的时间比较

PepperYouth的博客 1375

手把手教你用OpenCore在Dell Optiplex 3060上安装黑苹果(含ALC255声卡修复)

本文提供了一份详尽的指南,教你如何在Dell Optiplex 3060微型台式机上安装黑苹果系统。文章重点解决了使用OpenCore引导时的核心配置,特别是针对Intel UHD 630核显的驱动优化和Realtek ALC255声卡的修复方案,旨在帮助用户打造一个稳定可用的macOS工作站。

weixin_29275257的博客 789

机械臂控制的基础知识

在现代工业中,机械臂的自动化控制已经成为智能制造的重要一环。控制机械臂涉及多个学科,包括机械设计、运动学、控制理论和编程等。本文将从以下几个方面介绍机械臂控制的核心知识点:机械臂的构成、运动学分析、动力学建模、控制方法及编程实现。

qq_45728381的博客 5470

【深入C语言开发】if else和switch case的代码执行效率 【随笔】

有关C语言中代码执行效率问题

Tschome的博客 2162

姿态传感器/陀螺仪之LSM6DSLTR应用驱动程序设计

* LSM6DSLTR I2C地址(SA0=1) *//* 初始化LSM6DSLTR传感器(加速度计±2g,陀螺仪±250°/s) *//* 加速度计灵敏度 *//* 角速度值(°/s) *//* I2C句柄 *//* 陀螺仪灵敏度 *//* 加速度值(g) *//* 温度值(°C) *//* 设备地址 *//* IF_INC=1: 自动增量地址 *//* 10Hz采样率 *//* 配置I2C1引脚:PB6->SCL, PB7->SDA *//* 转换为实际温度值(°C),参考手册中温度计算公式 */

corlin6688的博客 395

c语言里的if语句吗,c语言中纯粹的if语句耗时吗

满意答案啊才一直被模仿2014.01.20采纳率:45%等级:11已帮助:9603人要算机器周期的话,还取决于实际的软硬件环境的,给你一个程序实验一下:#include __forceinline unsigned _int64 My_clock(void){_asm _emit 0x0F_asm _emit 0x31}unsigned _int64 Start(void) { retur...

weixin_30449673的博客 931

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1531

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 319

if判断语句执行时间为0!

今天看MIT的开放课程的时候,看到一个if语句逻辑判断的化简,可以把这个if语句: if(x>0||(x<0&&y>100)) { } 化简成: if(x>0||y>100) { } 于是我就想,既然语句得到精简,增强了可读性,但是效率方面呢?于是我写了个C计时程序,if()语句里面不执行操作,只是判断,循环一亿次...

weixin_34195364的博客 735

TIA protal与SCL从入门到精通(4)——软件单元使用

平台: TIA portal 15.1 1.添加软件单元 添加软件单元如下图: 关于软件单元使用基本限制,看如下文章即可 TIA protal与SCL从入门到精通(3)——软件单元基本介绍 每个软件单元是一个独立结构,所以每个软件单元的运行方式与实际PLC类似,所以首先添加主函数块: 注意:无论系统是否是具有并发性(这里不要混淆并行与并发的概念),在PLC所有主函数执行总是按主函数依次完成...

苦走一口田 7377

PHP下switch-case 和 if-else效率的比较

早晨在写一个PHP的程序,因为要处理很大的数据量,所以不得不考虑运行时间的问题。然后在计算每项的权值时遇到了问题,在考虑应该用switch-case还是if-else,在网上看了一下,大家都说switch-case的效率要比if-else高的多,自己写了几个程序测试了一下,是这样

SoloSun的专栏 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

switch-case和if-else的效率比较

偶然之间突然想到测试一下if-elseif、if、if-else、switch-case结构以及单纯通过遍历数组匹配的执行效率,发现选用正确的程序结构对于程序执行效率的影响还是挺大的。首先说说if-elseif、if、if-else三种的执行情况,对于这三种情况执行结果是。。差别不大,三种结果各循环1亿次,两次跑出来结果如下: 可见这三种结构看上去对程序的执行效率影响不是太大。同时又测试了if-e

wyk19950704的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

switch...case和if...else效率比较

1.switch的汇编表示 写入switch的代码: int fun(char c) { char res; switch(c) { case 'a': res='a'; break; case 'e': res='e'; break; case 'i': res='i'; br

零丁若叹 1万+

Java 代码优化 switch case 和 if else 语句的效率比较,使用JProfiler比下两者的效率

代码里面写 if else 或者 switch case 语句,很常见,那么这2个写法除了姿势不一样以为,他们的效率是不是也差距比较大呢? 1,switch case 比 一个个if else快吗? 2,switch case会因为case的数据类型越简单,而使得执行效率提高不少吗? 下面测试下 总体来说:2者差别不大,使用谁,代码执行效率,都没有啥质的飞跃。 有的说 switch ...

请叫我大师兄 3440

java if switch 效率高_Java 代码优化 switch case 和 if else 语句的效率比较,使用JProfiler比下两者的效率...

代码里面写 if else 或者 switch case 语句,很常见,那么这2个写法除了姿势不一样以为,他们的效率是不是也差距比较大呢?1,switch case 比 一个个if else快吗?2,switch case会因为case的数据类型越简单,而使得执行效率提高不少吗?下面测试下总体来说:2者差别不大,使用谁,代码执行效率,都没有啥质的飞跃。有的说 switch case可以直接定位到对...

weixin_28741413的博客 340

switch-case和if-else的效率比较·必看

绝大多数的程序员喜欢使用if判断,但是真的效率高吗?还是其它的,可能只会用if呢!我们今天就具体测一测,用事实说话,测试量100W: 理论上,switch是利用空间换时间。为了避免实验干扰,先行执行了gc()操作,后面提示了对应的内存消耗。 本文采用的是【Java】语言进行测试,后续会有【Python】【C#】 switch效率测试代码: public static void main(String[] args) { /** * switch与if效率测试·测试

红目香薰 1703

c语言中 switch case 和 if else执行效率的比较

/* $begin switch-c */ int switch_eg(int x) {     int result = x;     switch (x) {     case 100:     result *= 13;     break;     case 102:     result += 10;     /* Fall throug

ScottAci的博客 5242

Java:switch case 和 if else if的效率比较

在分支数大于三时,switch case效率更高 等于三时,效率近乎相同 小于三时,else if 效率更高

DavidJames的博客 840

c语言case效率高,switch和if else 哪个效率高-C#多分支效率比较

在 C# 中,多分支语句有两种,一种是 if elseif,另一种是 switch。在编程过程中,该用哪一种,应该根据具体情况和程序的执行效率决定。本文将探讨 switch 和 if elseif 倒底哪个效率高,下面是具体分析。先看两种语句实现的代码://页面初始化protected void Page_Load(object sender, EventArgs e){If_Elseif(3);...

weixin_42488542的博客 1045

switch...case 和 if...else效率比较和优化

switch...case写法:switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; }if...else写法:if(boolean){ }else if(boolean){ }else if(boolean){ }else{ }由此看来,switch有点以空间换时间的意思...

玩垃圾的人 1万+

C#之某种情况下switch...case...和if...else if...的效率比较

之前一直在考虑switch…case…和if…else if…在同样字符串判断之间的效率问题,今天测试了一下,看了一下耗时。 string test; for (int i = 0; i < 1000000; i++) { switch (str) { case"1": case"2": case "3": case "4": case "5.

qq_21489689的博客 2533

if和switch效率比较

翻了翻国外网站geeksforgeeks的解释,在比较情况大于5个时,switch效率更高,5个以下效率区分不明显。 文章内容摘自以下链接: https://www.geeksforgeeks.org/switch-vs-else/ 原文: Speed:A switch statement might prove to be faster than ifs provided number of cases are good. If there are only few cases, it migh.

无他 2516

Java流程控制 debug if-else else if swtich-case

思维导图 总结 流程控制 顺序: 选择:当某个条件符合的时候,会执行指定的代码段。 循环: if-else else if If (条件布尔返回值){ 返回true的时候,会执行的代码段 }else if( 条件){ 返回true的时候,会执行的代码段 }多个else if else{ 以上条件都不满足 } 注意:把概率高的放在前面!!! 一般要用到范围比较时会用if-else switch-...

Song_MJ的博客 390
上一篇: 使scp不用输入密码
下一篇: 五种开源协议的比较
wind19
博客等级 码龄23年 477粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值