C++ g++;编译后的程序集导致无限循环?
我一直在研究GNU的g++编译器中编译的程序集,它看起来像是一个无限循环(g++-s file.c-o out的部分输出): 除了最后一条jmp指令之外,所有这些指令都是movq或计算指令,但这只是让我们回到.L3。这是以下代码的主体:C++ g++;编译后的程序集导致无限循环?,c++,assembly,C++,Assembly,我一直在研究GNU的g++编译器中编译的程序集,它看起来像是一个无限循环(g++-s file.c-o out的部分输出): 除了最后一条jmp指令之外,所有这些指令都是movq或计算指令,但这只是让我们回到.L3。这是以下代码的主体: ull i; // unsigned long long int for (i = x - 1; i >= 0; i--) temp &= array2[array1[i] &a
ull i; // unsigned long long int
for (i = x - 1; i >= 0; i--)
temp &= array2[array1[i] & 1];
它是如何退出循环的?看起来它只是减少了i(subq$1,-8(%rbp)),并在不进行比较的情况下重新启动。假设
ull
是一个无符号长
,循环永远不会结束,因为:
i >= 0
这永远是真的
注意:
g++
在启用警告的情况下编译时报告此问题。假设ull
为无符号长
,循环永远不会结束,因为:
i >= 0
这永远是真的
注意:
g++
在启用警告的情况下编译时报告此问题。请至少显示整个函数。什么类型是i
?可能未签名
?请至少显示整个函数。什么类型是i
?可能是未签名的?嗯,是的。谢谢@我想在这里找到接受答案的方式和原因:嗯,嗯。谢谢@我想问的是:接受答案的方式和原因可以在这里找到: