Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `cin` C Jauh Lebih Lambat Daripada `input()` Python untuk Membaca Baris daripada Input Standard dan Bagaimana Prestasi Boleh Dipertingkatkan?

Mengapakah `cin` C Jauh Lebih Lambat Daripada `input()` Python untuk Membaca Baris daripada Input Standard dan Bagaimana Prestasi Boleh Dipertingkatkan?

Patricia Arquette
Patricia Arquetteasal
2024-11-23 06:34:10722semak imbas

Why is C  's `cin` Significantly Slower Than Python's `input()` for Reading Lines from Standard Input, and How Can Performance Be Improved?

Mengapakah membaca baris dari stdin jauh lebih perlahan dalam C berbanding Python?

Masalah:

Apabila membandingkan kod Python dan C untuk membaca baris input rentetan daripada stdin, kod Python melaksanakan dengan lebih pantas. Walaupun memastikan pelaksanaan C yang betul, Python yang setara mengatasinya dengan susunan magnitud.

Tetapan Lalai dan Panggilan Sistem:

Dalam Python, penimbalan input didayakan secara lalai , membawa kepada bacaan bahagian besar yang cekap dan lebih sedikit panggilan sistem. Sebaliknya, aliran C disegerakkan dengan stdio, memaksa cin untuk melangkau penimbalan input dan membaca aksara secara individu. Pilihan ini, bertujuan untuk mengelakkan konflik dengan fungsi stdio, secara tidak sengaja memperkenalkan overhed yang ketara.

Pengoptimuman Prestasi:

Untuk meningkatkan prestasi C, sertakan pernyataan cin.sync_with_stdio(false ) pada permulaan utama. Ini melumpuhkan penyegerakan strim dan membenarkan penimbalan bebas, meningkatkan kelajuan bacaan input dengan ketara.

Pilihan Alternatif:

Satu lagi alternatif berprestasi tinggi kepada cin ialah fgets, yang menggunakan fungsi stdio untuk bacaan input langsung.

Perbandingan Keputusan:

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 (not fair comparison) 54,644,808

Atas ialah kandungan terperinci Mengapakah `cin` C Jauh Lebih Lambat Daripada `input()` Python untuk Membaca Baris daripada Input Standard dan Bagaimana Prestasi Boleh Dipertingkatkan?. 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