Dalam artikel ini, kami menyelidiki sebab membaca baris daripada input standard (stdin) dalam C berprestasi jauh lebih perlahan daripada rakan Pythonnya.
Apabila membandingkan C dan Python berikut kod:
C :
getline(cin, input_line);
Python:
for line in sys.stdin:
Hasil yang mengejutkan muncul, dengan Python mengatasi prestasi C mengikut urutan magnitud. Percanggahan ini boleh dikaitkan dengan tetapan lalai yang berbeza dalam C .
Secara lalai, strim cin dalam C disegerakkan dengan sistem I/O standard (stdio), yang menyebabkannya mengelakkan penimbalan input. Ini bermakna cin akan membaca aksara input mengikut aksara dan bukannya menggunakan ketulan yang lebih besar, mengakibatkan banyak panggilan sistem yang mahal.
Untuk menangani had ini, anda boleh melumpuhkan penyegerakan ini dengan menambahkan pernyataan berikut pada permulaan utama anda fungsi:
std::ios_base::sync_with_stdio(false);
Dengan pengubahsuaian ini, cin akan dibenarkan untuk menimbal inputnya secara bebas, yang membawa kepada prestasi yang ketara keuntungan.
Selain itu, anda boleh menggunakan fungsi fgets, yang menyediakan cara yang lebih cekap dan langsung untuk membaca baris input tanpa menanggung overhed penyegerakan.
Ringkasan:
Tetapan penyegerakan lalai dalam C menghasilkan lebih banyak panggilan sistem untuk pengurusan penimbal, menjadikannya lebih perlahan daripada Python untuk membaca input stdin. Untuk meningkatkan prestasi, adalah disyorkan untuk melumpuhkan penyegerakan ini atau menggunakan fungsi fgets.
Atas ialah kandungan terperinci Mengapa C `stdin` Membaca Jauh Lebih Lambat Daripada Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!