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

  • Jose LviS el Bambino ( JLB )   LviSito

    Jose LviS el

    3 ŞUBAT 2008
  • schmittastic

    schmittastic

    9 EYLÜL 2009
  • ThePhestor

    ThePhestor

    22 Mart 2011