Döngü sıfır infaz süresi ile | Netgez.com
SORU
6 Kasım 2014, PERŞEMBE


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
6 Kasım 2014, PERŞEMBE


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.3Programı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

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • foreignimage

    foreignimage

    13 HAZÄ°RAN 2006