相关疑难解决方法(0)

使用大量if语句的缺点

除了代码可读性之外,为什么使用大量的if语句会很糟糕?

c# c++ java

11
推荐指数
2
解决办法
6469
查看次数

切换案例vs if else

我想知道以下代码编译成程序集的方式是否有任何不同.我听说switch-case比if else更有效,但在这个例子中我不太确定是否会出现这种情况.

if(x==1){
...
}else if(x==2){
...
}else{
...
}
Run Code Online (Sandbox Code Playgroud)

switch(x){
 case 1:
 ...
 break;

 case 2:
 ...
 break;

 default:
 ...
}
Run Code Online (Sandbox Code Playgroud)

c c++ if-statement compilation switch-statement

10
推荐指数
2
解决办法
4万
查看次数

为什么使用switch语句而不是if else语句?

开关似乎没那么无用,因为它们可以用if-else语句替换,它可以做的不仅仅是匹配一个char/int/enum等.我只能想到一个很好用于一个开关,那将是解释命令线args.

switch语句有哪些实际用途?

language-agnostic switch-statement

9
推荐指数
5
解决办法
985
查看次数

将它使用的代码和只读数据放在彼此旁边是一个好主意吗?

在为另一个问题编写查询表相关的答案时,我想起了一些我一直想知道的事情:在函数旁边找到函数所需的少量非代码数据是否明智,而不是传统的方法把它放在另一个部分?

假设您有一个小函数,它使用一个小的只读查找表.通常的方法似乎是将查找表定位在数据部分中,例如.rodata通常将其放置在距函数本身的文本一定距离处.

例如,一个使用16项LUT计算字节奇偶校验的简单函数:

GLOBAL parity

SECTION .text
parity:
  mov   eax, edi
  shr   edi, 4
  xor   eax, edi
  and   eax, 15
  movzx eax, byte [lut + eax]
  ret

SECTION .rodata
lut:
db 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
Run Code Online (Sandbox Code Playgroud)

现在,该方法恰好是大约16个字节的代码,查找表也是16个字节.因此,它们可以很容易地适应相同的缓存行.这看起来像是一个双赢 - lut 总是在函数中访问,并且只能由函数访问,因此我们可以通过放置代码和代码来降低调用此函数的成本.数据并排:

GLOBAL parity

SECTION .text
parity:
  mov   eax, edi
  shr   edi, 4
  xor   eax, edi
  and   eax, 15
  movzx eax, byte [lut + …
Run Code Online (Sandbox Code Playgroud)

optimization performance x86 assembly lookup-tables

6
推荐指数
1
解决办法
131
查看次数

If-else-if与地图

假设我有一个if/else-if链:

if( x.GetId() == 1 )
{
}
else if( x.GetId() == 2 )
{
}
// ... 50 more else if statements
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果我保留地图,它在性能方面会更好吗?(假设键是整数)

c++ performance map

5
推荐指数
2
解决办法
2935
查看次数

如果阻止vs Switch-Case阻止

通常,使用if块和其他许多ifs与switch case block相比有什么性能差异?某些语言或风格约定更喜欢一个吗?

具体来说,我对Matlab,C和C++很好奇

language-agnostic performance if-statement switch-statement conditional-statements

5
推荐指数
1
解决办法
1234
查看次数

代码优化; 切换与if

我有一个问题,关于是否在一个被调用很多的函数中使用'case'或'ifs'.现在是'ifs'中的以下内容; 代码不言自明:

int identifyMsg(char* textbuff) {
if (!strcmp(textbuff,"text")) {
    return 1;
}
if (!strcmp(textbuff,"name")) {
    return 2;
}
if (!strcmp(textbuff,"list")) {
    return 3;
}
if (!strcmp(textbuff,"remv")) {
    return 4;
}
if (!strcmp(textbuff,"ipad")) {
    return 5;
}
if (!strcmp(textbuff,"iprm")) {
    return 6;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:开关性能会更好吗?我知道如果使用'ifs',我可以将最有可能的选项放在顶部.

c++ optimization if-statement switch-statement

5
推荐指数
2
解决办法
4877
查看次数

转换是否同样糟糕?

我在StackOverflow上读到了这个

if(someCondition)
{
    someCode();
}
else
{
    alternateCode();
}
Run Code Online (Sandbox Code Playgroud)

由于易受分支错误预测的影响,效率可能很低(例如,请参阅此问题).

所以是一个switch构造,例如,

switch (someCondition)
{
    case (someCase):
        something();
        break;
    case (otherCase):
        someOtherInstructions();
        break;
    default:
        defaultAction();
        break;
}
Run Code Online (Sandbox Code Playgroud)

在这方面有什么不同(除了我允许三种可能性的事实)?

language-agnostic optimization performance compiler-optimization branch-prediction

5
推荐指数
1
解决办法
240
查看次数

if else vs java中的switch性能

我想知道使用if语句或switch之间是否存在任何效率差异.例如:

if(){
//code
}
else if(){
//code
}
else{
//code
}
Run Code Online (Sandbox Code Playgroud)

我相信程序需要去检查所有if语句,即使第一个if语句是真的.

switch(i){

case 1:
//code
break;
case 2:
//code
break;
Run Code Online (Sandbox Code Playgroud)

但是在交换机中,有一个break命令.我接近了吗?如果没有,你能解释一下它们之间的效率差异吗?

java if-statement switch-statement

5
推荐指数
1
解决办法
6501
查看次数

代码在哪里可以更有效地检查输入字符是否为元音?

该装配项目读取按键并以特定颜色输出它们。当按下一个元音时,它会改变文本的颜色,直到按下另一个元音为止,直到 ESC按下为止。颜色具有一定的模式,这就是为什么sub colorCode, 8当它到达循环结束时。我只是想让它更有效率。我尝试将所有比较语句放入一行,但没有成功。

INCLUDE        Macros.inc
INCLUDE     Irvine32.inc
INCLUDELIB  Irvine32.lib
.386
.STACK 4096
ExitProcess PROTO, dwExitCode:DWORD

.DATA
key       BYTE ?     
colorCode BYTE 5
max       BYTE 13

.CODE
main PROC

FindKey:
mov EAX, 50
call Delay

call ReadKey 
jz FindKey

MOV key, AL 
     cmp key, 75h
     JE UP
     CMP key, 6Fh
     JE UP
     CMP key, 69h
     JE UP
     CMP key, 65h
     JE UP
     CMP key, 61h
     JE UP
     CMP key, 55h
     JE UP
     CMP key, 4Fh
     JE UP …
Run Code Online (Sandbox Code Playgroud)

performance x86 assembly masm irvine32

4
推荐指数
1
解决办法
231
查看次数