Döngü sıfır infaz süresi ile
Sıfır yürütme zamanı olan bir döngü olması mümkün mü? Hatta boş bir döngü bir maliyet ile ilişkili olduğundan bir yürütme zamanı olması gerektiğini düşünüyorum.
CEVAP
Evet, altında-eğer kuralderleyici yalnızca mecbur etmek taklit gözlemlenebilir davranış kodu, böylece bir döngü bu değil herhangi bir gözlemlenebilir davranış, o zaman olabilir optimize edilmiş tamamen uzak ve bu nedenle etkili olacak var sıfır yürütme zamanı.
Örnekler
Örneğin, aşağıdaki kod:
int main()
{
int j = 0 ;
for( int i = 0; i < 10000; i )
{
j ;
}
}
gcc 4.9
-O3
bayrak temelde aşağıdaki azaltılması biter kullanarak derlenmiş (see it live):
main:
xorl êx, êx #
ret
Hemen hemen tüm iyileştirmeleri altında izin verdi-eğer kuralfarkında olduğum tek istisna gözlemlenebilir davranış etkisi için izin verilir copy elison.
Diğer bazı örnekler derleyici asla yürütülür ispat kodu kaldırabilirsiniz dead code elimination yer alacak. Aşağıdaki döngü gerçekten bir yan etki içermiyor olsa da örneğin asla çalıştırılacaktır kanıtlayabiliriz yana en iyi çıkış olabilirsee it live):
#include <stdio.h>
int main()
{
int j = 0 ;
if( false ) // The loop will never execute
{
for( int i = 0; i < 10000; i )
{
printf( "%d\n", j ) ;
j ;
}
}
}
Döngü uzakta, önceki örnek olarak aynı optimize eder. Daha ilginç bir örnek, bir döngü içinde bir hesaplama sabiti böylece bir döngü noktaları içine çıkarılabilir durumunda olacakbu altına düşüyor ne olduğundan emin değil), örneğin:
int j = 0 ;
for( int i = 0; i < 10000; i )
{
j ;
}
printf( "%d\n", j ) ;
için optimize edilebilir (see it live):
movl $10000, %esi #,
movl $.LC0, íi #,
xorl êx, êx #
call printf #
Hayır döngü dahil olduğunu görebiliriz.
Halbuki-eğer Kural standart kaplıdır
-eğer kuraltaslak kaplıdır C99 standart kesit 5.1.2.3
Programın çalışmasıdiyor ki:
Soyut makine, tüm ifadeleri tarafından belirtilen olarak değerlendirilir semantik. Gerçek bir uygulama bir parçası olarak değerlendirmek lazım değil ifade değeri kullanılmadığını anlamak olmadığını ve hiçbir gerekli yan etkileri üretilmektedir (herhangi bir arama nedeniyle de dahil olmak üzere işlev veya değişken bir nesne erişim).
as-if rule C da C modunda aynı sonucu üretmek için geçerlidir. C taslak standart bölüm 1.9
Bu kapsarProgramın çalışması:
Bu Uluslararası Standart anlam açıklamaları bir tanımlamak parametreli belirleyici olmayan soyut makine. Bu Uluslararası Standart uyumlu yapısı ile ilgili hiçbir gereklilik yerler uygulamaları. Özellikle, ya da kopya taklit gerek yok soyut makine yapısı. Bunun yerine, uygun uygulamaları (tek) Özet gözlemlenebilir davranışı taklit etmek için bu gereklidir makine olarak aşağıda açıklanmıştır.5
"sertifika süresi dolmuş hata Ayı...
Neden bir döngü iki döngü daha yavaş g...
JavaScript dizi döngü...
JavaScript döngü nesne...
64-bit ile 32-bit döngü sayısı bir değ...