Berikut ini adalah tes cepat untuk kasing sederhana: program untuk membaca daftar angka dari input standar dan XOR semua angka.
versi 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;
}
versi 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;
}
Hasil
Menggunakan program ketiga, saya membuat file teks yang berisi 33.280.276 angka acak. Waktu eksekusi adalah:
iostream version: 24.3 seconds
scanf version: 6.4 seconds
Mengubah pengaturan optimisasi kompiler sepertinya tidak banyak mengubah hasil.
Jadi: memang ada perbedaan kecepatan.
EDIT: Pengguna clyfish menunjukkan di bawah ini bahwa perbedaan kecepatan sebagian besar disebabkan oleh fungsi Iostream I / O yang menjaga sinkronisasi dengan fungsi CI / O. Kami dapat menonaktifkannya dengan panggilan ke std::ios::sync_with_stdio(false);
:
#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;
}
Hasil baru:
iostream version: 21.9 seconds
scanf version: 6.8 seconds
iostream with sync_with_stdio(false): 5.5 seconds
C ++ iostream menang! Ternyata sinkronisasi / pembilasan internal inilah yang biasanya memperlambat iostream i / o. Jika kita tidak mencampur stdio dan iostream, kita dapat mematikannya, dan kemudian iostream tercepat.
Kode: https://gist.github.com/3845568