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 중국어 웹사이트의 기타 관련 기사를 참조하세요!