Rumah >pembangunan bahagian belakang >C++ >Adakah scanf() Sentiasa Mencapai Prestasi iostream dalam Kelajuan Input C?
Bolehkah scanf() mengatasi iostream dalam Prestasi C?
Tanggapan bahawa scanf() menyediakan pengendalian input yang lebih pantas daripada cin dalam C telah tercetus perdebatan di kalangan pengaturcara. Artikel ini menyelidiki perbandingan prestasi antara kaedah ini, memeriksa bukti dan memberikan penjelasan terperinci.
Ujian Prestasi
Untuk menilai perbezaan prestasi, program ringkas telah dicipta yang membaca senarai nombor daripada input standard dan melakukan operasi XOR pada mereka. Kedua-dua cin dan scanf() telah digunakan dalam pelaksanaan berasingan:
#include <iostream> int main() { int parity = 0; int x; while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
#include <stdio.h> int main() { int parity = 0; int x; while (1 == scanf("%d", &x)) parity ^= x; printf("%d\n", parity); return 0; }
Keputusan
Menggunakan fail yang mengandungi lebih 33 juta nombor rawak, masa pelaksanaan diukur:
Pertimbangan Pengoptimuman
Menukar tetapan pengoptimuman pengkompil mempunyai kesan minimum pada hasil.
Prestasi iostream yang dipertingkatkan
Telah didapati bahawa jurang prestasi adalah sebahagiannya disebabkan oleh iostream mengekalkan penyegerakan dengan fungsi C I/O. Dengan melumpuhkan penyegerakan ini dengan arahan std::ios::sync_with_stdio(false), prestasi iostream meningkat dengan ketara:
#include <iostream> int main() { 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 Baharu
Selepas melumpuhkan penyegerakan iostream :
Kesimpulan
Buktinya menunjukkan bahawa scanf() memang lebih pantas daripada cin untuk pengendalian input mentah dalam C . Walau bagaimanapun, jika penyegerakan iostream dilumpuhkan, iostream menjadi pilihan unggul, mengatasi kedua-dua scanf() dan versi cin yang dioptimumkan.
Oleh itu, walaupun scanf() mungkin lebih pantas untuk senario tertentu, iostream menawarkan kawalan yang lebih baik ke atas penyegerakan dan rangkaian fungsi yang lebih luas. Apabila kelajuan adalah penting, melumpuhkan penyegerakan iostream disyorkan.
Atas ialah kandungan terperinci Adakah scanf() Sentiasa Mencapai Prestasi iostream dalam Kelajuan Input C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!