SORU
15 Kasım 2014, CUMARTESİ


Temp değişkenleri programı yavaşlatır mı?

Aşağıdaki C kodu var:

int i = 5;
int j = 10;
int result = i   j;

Eğer bu birçok kez döngü içinde ben olsaydım, int result = 5 10 kullanmak daha hızlı olur? Eğer iki değişken bazı dizi endeksleri hesaplamak için biraz uzun bir ifade kullanılarak elde edilmiş ise genellikle benim kod daha okunabilir hale getirmek için geçici değişkenler, örneğin oluşturmak. Bu kötü performans-bilge C? Diğer diller ne olacak?

CEVAP
15 Kasım 2014, CUMARTESİ


Modern bir optimize derleyici gcc -std=c99 -O3 bayraklar kullanarak godbolt aşağıdaki örnek kullanmak istersek bu değişkenleri uzakta, örneğin optimize olacaktırsee it live):

#include <stdio.h>

void func()
{
  int i = 5;
  int j = 10;
  int result = i   j;

  printf( "%d\n", result ) ;
}

aşağıdaki Meclisi neden olur:

movl    $15, %esi

i j, hesaplanmasında bu constant propagation şeklidir.

Not, bir yan etkisi var o kadar printf ekledim, aksi takdirde func için optimize olması gerek

func:
  rep ret

Bu iyileştirmeleri altında izin verilir-eğer kuralsadece derleyici bir program gözlemlenebilir davranışı taklit etmek için gerektirir., Bu taslak C99 standardı bölüm 5.1.2.3 kaplıdırProgramı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).

Ayrıca Bkz: Optimizing C Code : Constant-Folding

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • Lena Danya

    Lena Danya

    11 NİSAN 2010
  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007