이 기사에서는 C에서 표준 입력(stdin)에서 행을 읽는 이유를 살펴봅니다. Python에 비해 성능이 상당히 느립니다.
다음 C와 Python을 비교할 때 코드:
C :
getline(cin, input_line);
Python:
for line in sys.stdin:
Python이 C를 능가하는 놀라운 결과가 나타났습니다. 규모순으로. 이러한 불일치는 C의 다른 기본 설정으로 인해 발생할 수 있습니다.
기본적으로 C의 cin 스트림은 표준 I/O 시스템(stdio)과 동기화되어 입력 버퍼링을 방지합니다. 이는 cin이 더 큰 청크를 사용하는 대신 입력 문자를 문자별로 읽어서 값비싼 시스템 호출이 많이 발생한다는 것을 의미합니다.
이 제한을 해결하려면 기본 명령의 시작 부분에 다음 명령문을 추가하여 이 동기화를 비활성화할 수 있습니다. 함수:
std::ios_base::sync_with_stdio(false);
이 수정을 통해 cin은 입력을 독립적으로 버퍼링할 수 있어 성능이 크게 향상됩니다.
또한, fgets 함수를 사용할 수 있습니다. 이는 동기화 오버헤드 없이 입력 라인을 읽는 더 효율적이고 직접적인 방법을 제공합니다.
요약:
기본 동기화 설정 C에서는 버퍼 관리를 위한 더 많은 시스템 호출이 발생하므로 stdin 입력을 읽는 데 Python보다 속도가 느려집니다. 성능을 향상시키려면 이 동기화를 비활성화하거나 fgets 기능을 사용하는 것이 좋습니다.
위 내용은 C `stdin`이 Python보다 훨씬 느리게 읽는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!