stdin에서 줄을 읽는 것이 Python보다 C에서 훨씬 느린 이유
Python과 C의 입력 읽기 속도를 비교하는 동안 다음이 관찰되었습니다. C 코드의 수행 속도가 훨씬 느려졌습니다.
cin의 부족 버퍼링
이러한 불일치는 기본 동작의 근본적인 차이로 인해 발생합니다. C의 cin은 기본적으로 표준 입출력(stdio)과 동기화되어 입력 버퍼링을 생략하고 결과적으로 문자를 한 번에 하나씩 읽어 시스템 호출 측면에서 비용이 많이 드는 프로세스가 됩니다.
해결책: 동기화 비활성화
성능을 향상하려면 다음 행을 추가하여 cin과 stdio의 동기화를 비활성화할 수 있습니다. 프로그램 시작 부분:
std::ios_base::sync_with_stdio(false);
이를 통해 C 스트림이 I/O를 독립적으로 버퍼링할 수 있어 읽기 속도가 크게 향상됩니다.
차이점을 설명하기 위한 밀짚 설문조사:
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 (unfair comparison) | 54,644,808 |
이 표는 cin의 동기화가 비활성화되었을 때 읽기 속도의 엄청난 차이를 보여줍니다.
위 내용은 C의 `cin`이 Python의 입력보다 현저히 느린 이유는 무엇이며 어떻게 개선할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!