1. printf 함수를 사용했을 경우와 write 시스템 호출(system call)을 사용하였을 경우의
성능을 비교하는 프로그램을 작성하고, 그 결과를 분석하시오.
위가 문제 였구
------------------------------------------------------------------------
이게 내가 짠 소스인데
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
int main(void)
{
struct timespec ts;
long time1, time2, time3;
clock_gettime(CLOCK_REALTIME, &ts);
time1=ts.tv_nsec;
printf("HelloWorldn");
clock_gettime(CLOCK_REALTIME, &ts);
time2=ts.tv_nsec;
write(0, "HelloWorldn", 11);
clock_gettime(CLOCK_REALTIME, &ts);
time3=ts.tv_nsec;
printf("%.10ldn%.10ldn", time3-time2, time2-time1);
return 0;
}
----------------------------------------------------------------------
이것은 결과값
HelloWorld
HelloWorld
0000135000
0000186000
----------------------------------------------------------------------
여기서 프갤분들한테 질문 2가지만
소수 10자리 까지 출력하려고 했는데
http://kldp.org/node/123679
위 사이트의 상단 결과값은 나처럼 000으로 채워짐
아래 결과값은 끝까지 정밀값이 전부 구해짐
왜 저런 현상이 나는거죠? OS 차이인가...
2번째는 문제 printf 와 write 쓰면 후자가 더 느린데 이유가 뭔지 ;
결과만 도출했고 설명을 못하겠음요...
버퍼 차이인가... 대충이라도 설명좀 해주실분;
%.10ld 면 소숫점 10자리 까지 나오는거 아님요? 재대로 한거 같아요 그리고 \\n 에서 \\가 빠졌네여...
음... long decimal 이니깐 찍히지 않나요? 결과값 재대로 나오는거 같은데요
파일 디스크립터 부분은 아무숫자나 찍어도 결과값 똑같이 나오길래 아무숫자나 박아 넣은건데 | -1은 에러라고 만 알고 있고 그외 숫자에 대한 정보를 몰라서 ㅠㅠ 일단 1로 수정해 둘게요
자료형부터 배워야할듯
들여쓰기는 깔끔하게 해서 좋네
음... 그럼 %f로 바꿔야 하는게 맞나보네요...
시스템콜은 자주쓰면 존나 느림
그렇기 때문에 라이브러리로 정의된 printf를 쓰는거고
http://mintnlatte.tistory.com/149
음... 그럼 문자 출력을 한 100~1000번쯤 늘리면 더 구체적인 값이 나올려나요...
마지막으로 이것하나만 느린데 시스템콜 쓰는 이유가 뭘까요...;
라이브러리도 내부적으로 시스템콜을 씀
그럼 라이브러리 함수가 느려야 정상 아닌가요