Scanf() kullanarak C programlarının cin kullanarak daha hızlıdır? | Netgez.com
SORU
25 HAZÄ°RAN 2009, PERÅžEMBE


Scanf() kullanarak C programlarının cin kullanarak daha hızlıdır?

EÄŸer bu doÄŸruysa bilmiyorum, ama sorun sitelerine saÄŸlayan bir SSS okurken, dikkatimi poke bir ÅŸey buldum:

Giriş/çıkış yöntemleri kontrol edin. C , cin ve print kullanarak çok yavaş. Bu kullanım ve giriş veya çıkış iyi bir miktar ile herhangi bir sorunu çözmek mümkün değil varlık için söz vereceksin. Printf ve scanf yerine kullanın.

Biri bunu açıklayabilir miyim? Gerçekten kullanıyor() scanfC programları daha hızlı kullanmaktan daha? Evet, bu C programlarında kullanmak için iyi bir uygulamadır? Sadece C öğreniyorum C rağmen özel olduğunu düşünüyordum

CEVAP
6 EKÄ°M 2012, CUMARTESÄ°


Burada basit bir olgu hızlı bir test: standart giriş ve XOR dan numaralarının bir listesini okumak için bir program numaraları.

sürüm iostream:

#include <iostream>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

sürüm scanf:

#include <stdio.h>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d\n", parity);

  return 0;
}

Sonuçları

Üçüncü bir programı kullanarak, bir metin dosyası 33,280,276 rasgele sayılar içeren oluşturdum. Yürütme süreleri:

iostream version:  24.3 seconds
scanf version:      6.4 seconds

Derleyici optimizasyon ayarları değiştirme sonuçları hiç de fazla bir değişiklik görünmüyordu.

Böylece gerçekten bir hız farkı var.


DÜZENLEME:Kullanıcı hız farkı O fonksiyonları G/Ç işlevleri C ile senkronizasyon bakımı/iostream büyük ölçüde bağlı olduğunu points out below clyfish. Bu std::ios::sync_with_stdio(false); bir çağrı ile kapatabiliriz:

#include <iostream>

int main(int argc, char **argv) {

  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

Yeni bulgular:

iostream version:                       21.9 seconds
scanf version:                           6.8 seconds
iostream with sync_with_stdio(false):    5.5 seconds

C iostream kazandı!Bu dahili senkronizasyon / kızarma normalde iostream G/Ç yavaşlar ne olduğu ortaya çıktı. Eğer cstdio ve iostream karıştırma olursak, kapatabiliriz, ve sonra iostream hızlı.

Kod: https://gist.github.com/3845568

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

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • merumputdotcom

    merumputdotc

    24 ÅžUBAT 2012
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007