int main(){
for(unsigned i = 0; i<8;)
i++;
return 0;
}
int main(){
for(unsigned i = 0; i<8;i++)
;
return 0;
}
因此,以非传统的方式编写for循环是否更有效?我将在两个asm中粘贴以进行比较。首先用非常规的方法:
;Flags[SingleProEpi] functionLength[52] RegF[0] RegI[0] H[0] frameChainReturn[UnChained] frameSize[16]
|main| PROC
|$LN6|
sub sp,sp,#0x10
mov w8,#0
str w8,[sp]
|$LN2@main|
ldr w8,[sp]
cmp w8,#8
bhs |$LN3@main|
ldr w8,[sp]
add w8,w8,#1
str w8,[sp]
b |$LN2@main|
|$LN3@main|
mov w0,#0
add sp,sp,#0x10
ret
ENDP ; |main|
和传递方式:
;Flags[SingleProEpi] functionLength[56] RegF[0] RegI[0] H[0] frameChainReturn[UnChained] frameSize[16]
|main| PROC
|$LN6|
sub sp,sp,#0x10
mov w8,#0
str w8,[sp]
b |$LN4@main|
|$LN2@main|
ldr w8,[sp]
add w8,w8,#1
str w8,[sp]
|$LN4@main|
ldr w8,[sp]
cmp w8,#8
bhs |$LN3@main|
b |$LN2@main|
|$LN3@main|
mov w0,#0
add sp,sp,#0x10
ret
ENDP ; |main|
如果您想要优化的代码,请向您的编译器索取!检查如何优化未优化的代码是没有意义的。
-O3
完全消除了循环。
编译器资源管理器演示:标准
编译器资源管理器演示:非标准
printf("%d\n", 1);
printf("%d\n", 2);
printf("%d\n", 3);
printf("%d\n", 4);
printf("%d\n", 5);
printf("%d\n", 6);
printf("%d\n", 7);
printf("%d\n", 8);
所以我的理解是,增强for循环应该更慢,因为它们必须使用迭代器。。然而,我的代码提供的结果参差不齐。。(是的,我知道循环逻辑占用了循环中的大部分时间) 对于较少的迭代次数(100-1000),无论有无JIT,增强的For循环似乎都要快得多。相反,对于大量迭代(100000000),传统循环速度要快得多。这是怎么回事?
问题内容: 我读到 增强的for循环 比普通的 for循环 更有效: http://developer.android.com/guide/practices/performance.html#foreach 当我搜索它们的效率之间的差异时,我发现的是:如果是普通的for循环,我们需要一个额外的步骤来找出数组的长度或大小等, 但这是唯一的原因,增强的for循环优于普通的for循环吗?在那种情况下,
我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两
想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 什么是最好的 注意:我知道我可以使用: 但要做到这一点,我需要将所有变量声明为原子整数,这使得代码冗长 一定有比使用原子整数更好的方法。有?
我对使用高级for循环和试图使流程清晰感到困惑。 例如,我有这样的主数据帧: 我已经有一个包含每个元素的百分比表,如下所示: 我想计算每个键的条件概率,如下所示: 我对年份栏和元素感到困惑。如何使用for循环从主数据帧的列中提取元素? 我正在考虑另一种方法,但不知道如何开始。我从百分比表中得到key1和key2,然后创建一个年份的范围(range(1983,…),然后从条件概率函数中得到prob。
问题内容: 我正在编写一种简单的算法来检查整数的素数,但在将以下Java代码转换为Python时遇到问题: 因此,我一直在尝试使用此方法,但是显然我跳过了除法3: 问题答案: 从技术上讲,Python中唯一的-loop是“ for-each”,因此您可以使用类似 当然,Python可以做得更好: 也将是等效的(假设该Java循环的末尾有一个)。确实,后者将被视为采用 Python的 方式来实现。