Rumah >pembangunan bahagian belakang >C++ >Mengapa Bacaan Input Standard C Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?

Mengapa Bacaan Input Standard C Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?

Barbara Streisand
Barbara Streisandasal
2024-12-26 16:29:09386semak imbas

Why is C   Standard Input Reading Slower Than Python's, and How Can It Be Improved?

Mengapa C Standard Input Reading Jatuh Terhadap Kecekapan Python

Sambil membandingkan prestasi Python dan C dalam membaca baris input rentetan daripada standard input (stdin), perbezaan yang ketara muncul: Kod C berjalan dengan ketara lebih perlahan. Ini mendorong penyiasatan tentang sebab asas bagi jurang prestasi ini.

Isu ini berpunca daripada tetapan lalai C . Secara lalai, istreams, seperti cin, menyegerakkan dengan stdio, mengakibatkan pengelakan penimbalan input. Untuk mengoptimumkan prestasi, penyegerakan ini boleh dilumpuhkan menggunakan pernyataan std::ios_base::sync_with_stdio(false). Pelarasan ini mengurangkan kekangan prestasi utama.

Strim input standard beroperasi secara berbeza mengikut reka bentuk antara Python dan C . Python biasanya ditimbal, manakala C tidak ditimbal secara lalai. Dalam keadaan biasa, penimbalan mengurangkan panggilan sistem, meningkatkan kecekapan. Walau bagaimanapun, pelaksanaan dan penimbal berasingan bagi stdio dan iostream berasaskan FILE* dalam C menimbulkan isu yang berpotensi apabila digunakan bersama.

Untuk mengelakkan ketidakkonsistenan penimbal dan hasil yang tidak dijangka, C menyegerakkan strim dengan stdio secara lalai. Walaupun ini melindungi daripada kemungkinan masalah, ia memperkenalkan overhed, terutamanya apabila memproses sejumlah besar input.

Untuk mencapai prestasi maksimum, pengaturcara boleh melumpuhkan penyegerakan menggunakan kaedah sync_with_stdio. Pengoptimuman ini membolehkan strim standard C menampan secara bebas, meningkatkan kelajuan dengan ketara dalam senario tertentu.

Tanda Aras Prestasi

Untuk perbandingan yang lebih komprehensif, berikut ialah penanda aras prestasi dengan pelbagai pendekatan :

Implementation Lines per second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc 54,644,808 (Not a fair comparison)

Seperti yang terbukti, melumpuhkan penyegerakan dan penggunaan fgets menghasilkan peningkatan prestasi yang ketara dalam C .

Atas ialah kandungan terperinci Mengapa Bacaan Input Standard C Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn