2014-01-24 2 views
-1

4자를 포함하는 char 포인터를 반환하는 함수가 있습니다.많은 양의 문자열을 stdout으로 보내는 가장 좋은 방법은 무엇입니까?

char *foo(unsigned short n) 
{ 
    return "abc\n"; 
} 

이제 100,000 번 실행하고 결과를 stdout으로 보냅니다. 그리고 그것은 가능한 가장 빠른 방법으로 수행되어야합니다.
이 함수를 쓰지 않고 10000 번 실행하면 약 0.45 초가 걸립니다.
나는 시도했다 :

    • 에 fwrite
    ... 
        fwrite(foo(n), 4, 1, stdout); 
        ... 
    
    ,369

    ~6.5s

... 
    printf("%s", foo(n)); 
    ... 
PRINTF

~9.9s

  • 함수 역시 버퍼링하고 빠르게 만들 수있는 방법이 있나요
char buffer[400001] = ""; 
    ... 
    strncat(buffer, foo(n), 4); 
    ... 
    fwrite(buffer, 400000, 1, stdout); 

~7s

에 fwrite? 적어도 5 세 이하는 가고 싶습니다.

+1

당신은 puts() (라인 당) 또는 puch()가있는 사이클을 잊어 버렸습니다 ... –

+2

프로그램을 시간을 잰다면 * 실제로 * CPU 시간이 몇 밀리 초 밖에 걸리지 않을 수도 있습니다. 나머지는 모두 출력 터미널이 텍스트를 처리하는 속도 때문입니다. 왜 화면에 많은 양의 데이터를 인쇄해야합니까? 빨리 읽을 수는 없지, 그렇지? – usr2564301

+1

나는 그 숫자를 믿지 않는다. 좀 더 실제적인 측정 값을 얻으려면'./a.out>/tmp/out.txt'로 실행하십시오 (또는'/ dev/null'로 먼저 리다이렉트). –

답변

0

당신의 친절한 의견에 따라 나는 더 많은 테스트를했는데 내가 무엇을 가지고 왔는지는 fputs()이 가장 빠릅니다. > out.txt의 경우 ~ 0.45s이고 > NUL의 경우 ~ 0.61s입니다. 그래서 콘솔 출력이 모든 것을 느리게하고 있다는 것이 밝혀졌습니다.

관련 문제