Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Hangisi Daha Hızlı Çalışır ?
#1
Merhabalar,

Sizce hangisi daha hızlı çalışır ?

 
i = i + 1;

/////

i++;


Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#2
Hocam benim bildiğim ikincisi i++
1.de hem arttırma hemde atama işlemi yaptırıyorsunuz
2.cide ise direk gidip onu arttırıyor gibi bir mantığı vardı yanlış bilmiyorsam
Cevapla
#3
" i++ ifadesi sayacın değerini her adımda 1 artırır. Tabii, i++ yerine
i = i+1 deyimi de yazılabilir. Ama birinci yazılış CPU’da daha hızlı çalışır"

Demişler gerci sebebini yazmamis. (Kaynak: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol)

Ayrıca burayada bakilabilir.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#4
Bildiğim kadarı ile çalışma prensipleri arka tarafta aynı sadece yazım kuralları farklı
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#5
Böyle bir test yapılmış sonuçlar aşağıdaki gibi
public class Test {

   static volatile int x, y;

    static class IncThread extends Thread {
        public void run() {
           for (int i=0; i<50000; i++) x++;
           for (int i=0; i<50000; i++) y = y+1;
        }
    }

   public static void main(String[] args) throws InterruptedException {
       Thread t1 = new IncThread();
       Thread t2 = new IncThread();
       t1.start();
       t2.start();
       t1.join();
       t2.join();
       System.out.printf("x = %d, y = %d%n", x, y);
   }

}

Kod:
x = 99897, y = 81556

Yani
x++; Kullanımı daha hızlı çalışıyormuş
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#6
(23-01-2018, Saat: 08:29)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhabalar,

Sizce hangisi daha hızlı çalışır ?

 
i = i + 1;

/////

i++;



Low Level'a yabancı biri olarak; ilk izlenimlerimi söylemek isterim.
İlk yazım şekli insan diline daha yakın görünüyor, insancıl ve üst seviyeli yazım.
İkinci yazım şekli insan diline uzak, daha cebirsel ve alt seviyeli yazım gibi görünüyor.
Son bir not; son kullanıcıların elindeki uygulamada, bu farkı görme ve ölçmenin de imkansız olduğunu, varsa böyle bir imkanın insan hissiyatıyla algılanamayacak derecede düşük olduğunu düşünüyorum. 
Birde ilave bir soru sormak istiyorum. 
i+; syntax'ı var mı? Yoksa neden i++ yerine i+ kullanılmıyor? Yada bunun A+++ gibi gelecek bir sürümü (i+++) olacak mı?   Huh
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#7
Bu bir standart değil, derleyiciye göre değişir.sizin kullandığınız derleyicinin bu kodu nasıl makine koduna dönüştüreceğine  göre değişir.
Örneğin aşağıdaki kodu  gcc aynı şekilde assembly koduna dönüştürüyor.Dolayısıyla gcc'de bu kodlar arasında hız farkı olmaz.
int i=0;
printf("a");
i=i+1;
printf("a");
i++;

Dönüştürdüğü Kod:
mov DWORD PTR [rbp-4], 0 ;i=0;
mov edi, 97
call putchar
add DWORD PTR [rbp-4], 1 ;i=i+1;
mov edi, 97
call putchar
add DWORD PTR [rbp-4], 1 ;i++; bir fark yok görüldüğü gibi
mov eax, 0

Not: C'de yazdığınız bir kodun assembly çıktısını linuxta gcc ile gcc -c -S -masm=intel dosya.c komutu ile alabilirsiniz.
Bizi Toprağa Gömdüler Fakat Tohum Olduğumuzu Bilmiyorlardı.
Cevapla
#8
(23-01-2018, Saat: 12:07)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Oli+; syntax'ı var mı? Yoksa neden i++ yerine i+ kullanılmıyor? Yada bunun A+++ gibi gelecek bir sürümü (i+++) olacak mı?   Huh

Yok abi i++; ve i--; var Bizdeki Inc(i)

(23-01-2018, Saat: 12:32)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu bir standart değil, derleyiciye göre değişir.sizin kullandığınız derleyicinin bu kodu nasıl makine koduna dönüştüreceğine  göre değişir.
Örneğin aşağıdaki kodu  gcc aynı şekilde assembly koduna dönüştürüyor.Dolayısıyla gcc'de bu kodlar arasında hız farkı olmaz.
int i=0;
printf("a");
i=i+1;
printf("a");
i++;

Dönüştürdüğü Kod:
mov DWORD PTR [rbp-4], 0 ;i=0;
mov edi, 97
call putchar
add DWORD PTR [rbp-4], 1 ;i=i+1;
mov edi, 97
call putchar
add DWORD PTR [rbp-4], 1 ;i++; bir fark yok görüldüğü gibi
mov eax, 0

Not: C'de yazdığınız bir kodun assembly çıktısını linuxta gcc ile gcc -c -S -masm=intel dosya.c komutu ile alabilirsiniz.

Bir arkadaşa, Mülakatta sormuşlar bu soruyu
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#9
Mülakatta mı ? enteresan.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#10
(23-01-2018, Saat: 13:28)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMülakatta mı ? enteresan.

Eve mülakatta insan böyle bir soruyu neden sorar ?
Neyi anlamaya çalıştılar acaba, bunu soran firma java dilini kullanıyormuş.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Uygulama nasil calisir? klavye 0 304 25-01-2018, Saat: 14:26
Son Yorum: klavye



Konuyu Okuyanlar: 1 Ziyaretçi