C 표준 입력 읽기가 Python보다 느린 이유는 무엇이며 어떻게 개선할 수 있습니까?

DDD
풀어 주다: 2024-11-23 07:23:18
원래의
848명이 탐색했습니다.

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

C에서 stdin의 줄을 읽는 것이 Python의 줄보다 느린 이유

기대에도 불구하고 표준 입력에서 입력 줄을 읽는 C 코드는 Python에 비해 훨씬 느리게 수행됩니다. 이러한 불일치는 C의 기본 설정에서 비롯됩니다.

기본 입력 스트림 구성

기본적으로 C 입력 스트림(cin)은 표준 입력/출력(stdio)과 동기화됩니다. ). 이러한 동기화는 cin이 입력 버퍼링을 피하려고 시도하여 한 번에 하나씩 문자를 읽게 됨을 의미합니다.

버퍼링이 중요한 이유

일반적으로 입력 스트림은 입력을 더 큰 규모로 버퍼링합니다. 데이터 검색에 필요한 시스템 호출 수를 줄입니다. 그러나 FILE* 기반 stdio 및 iostream에 대한 별도의 구현 및 버퍼는 함께 사용하면 문제가 발생할 수 있습니다.

잠재적인 충돌을 방지하기 위해 스트림은 기본적으로 stdio와 동기화됩니다. Cin은 문자를 하나씩 읽으므로 특히 수백만 줄을 처리할 때 상당한 오버헤드가 발생합니다.

해결책

성능을 향상하려면 sync_with_stdio(false)를 사용하여 스트림 동기화를 비활성화하세요. 주 함수 시작 시 메서드:

std::ios_base::sync_with_stdio(false);
로그인 후 복사

이러한 변경으로 C 스트림은 독립적으로 버퍼링할 수 있으므로 결과적으로 더 빠른 입력 처리가 가능합니다.

대체 접근 방식: fgets

입력 속도를 향상시키는 또 다른 방법은 getline 대신 fgets 함수를 사용하는 것입니다.

char buffer[1024];
while (fgets(buffer, sizeof(buffer), stdin)) {
    // Process the line
}
로그인 후 복사

위 내용은 C 표준 입력 읽기가 Python보다 느린 이유는 무엇이며 어떻게 개선할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿