相关疑难解决方法(0)

AMD64 - nopw汇编指令?

在这个编译器输出中,我试图理解nopw指令的机器码编码是如何工作的:

00000000004004d0 <main>:
  4004d0:       eb fe                   jmp    4004d0 <main>
  4004d2:       66 66 66 66 66 2e 0f    nopw   %cs:0x0(%rax,%rax,1)
  4004d9:       1f 84 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

http://john.freml.in/amd64-nopl上有一些关于"nopw"的讨论.任何人都可以解释4004d2-4004e0的含义吗?从查看操作码列表,似乎66 ..代码是多字节扩展.我觉得我可能会得到一个比这更好的答案,除非我试图在几个小时内查看操作码列表.


asm输出来自C中的以下(疯狂)代码,它优化为简单的无限循环:

long i = 0;

main() {
    recurse();
}

recurse() {
    i++;
    recurse();
}
Run Code Online (Sandbox Code Playgroud)

编译时gcc -O2,编译器识别无限递归并将其转换为无限循环; 它实际上做得很好,事实上,它实际上是在main()没有调用recurse()函数的情况下循环.


编者注:带NOP的填充函数并不特定于无限循环.在Godbolt编译器资源管理器中,这是一组具有一系列NOP长度的函数.

c x86 assembly gcc machine-code

20
推荐指数
1
解决办法
1万
查看次数

在互斥条件下,多个“ if”语句与“ if else if”之间的性能差异吗?

我很好奇Java如何对具有互斥条件的多个“ if”语句进行优化,但是我不具备自己分析该知识的知识。问题基本上是该问题的Java版本。“ if if”与“ if else if”的性能差异

我已经看到针对的if语句回答了return这个问题,但是这个问题是针对if具有互斥条件但不返回的语句。

1.多个if语句

if (x == 0) doSomething();
if (x == 2) doSomething();
if (x == 5) doSomething();
Run Code Online (Sandbox Code Playgroud)

2.链接的If-else语句

if (x == 0) doSomething();
else if (x == 2) doSomething();
else if (x == 5) doSomething();
Run Code Online (Sandbox Code Playgroud)

问题
#1和#2是否执行相同的编译后?
(另外:如果是这样,那么Java可以优化条件的复杂程度有多大?)

java optimization

9
推荐指数
1
解决办法
187
查看次数

链式 if 和 else if 之间的区别

所以我有一个问题,我现在已经有很长一段时间了,使用 else if 和链式 if 语句之间有什么区别,它们不是产生相同的东西吗?例如,以这个基本示例为例:


short age {0};
std::cin >> age;

if(age > 18) cout << "You are an adult";
if(age < 18) cout << "YOu are a teen";
if(age == 0) cout << "YOu are born";

Run Code Online (Sandbox Code Playgroud)


short age {0};
std::cin >> age;

if(age > 18) cout << "You are an adult";
else if(age < 18) cout << "YOu are a teen";
else if(age == 0) cout << "YOu are born";

Run Code Online (Sandbox Code Playgroud)

它们有何不同?

c++

2
推荐指数
1
解决办法
121
查看次数

使用多个 if 语句还是后面有很多 else if 语句更有效?

作为一个例子,在开始时有很多ifs 和很多else if在一个之后if。我在下面添加了一些伪代码。

if (x=1)
  print x;
if (x=2)
  print x;
if (x=3)
  print x;
Run Code Online (Sandbox Code Playgroud)

或者

if (x=1)
  print x;
else if (x=2)
  print x;
else if (x=3)
  print x;
Run Code Online (Sandbox Code Playgroud)

c# optimization

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

标签 统计

optimization ×2

assembly ×1

c ×1

c# ×1

c++ ×1

gcc ×1

java ×1

machine-code ×1

x86 ×1