본문 바로가기
Program Language/C(lib)

log 찍기

by Leo 리오 2011. 12. 7.
반응형



GeSHi © 2004-2007 Nigel McNie, 2007-2010 Benny Baumann, 2008-2009 Milian Wolff
  1. #include <stdio.h>
  2. #define MAX 123121
  3. void do_something()
  4. {
  5.         usleep(100);
  6. }
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.         int total=MAX,cnt=0,per=0;
  11.         printf(" 0%%\n");
  12.         for(cnt=0;cnt<MAX;cnt++)
  13.         {
  14.                 if(cnt==total/100*per) printf("\r\b\r%2d%%\n"
     
    ,(per++));
  15.                 do_something();
  16.         }
  17.         printf("done\n");
  18. }
  19.  
Parsed in 0.006 seconds at 49.49 KB/s

0123456



total/100*per 아마 이 부분이 꽤 많은 cycle을 잡아먹겠지?




if(cnt==total/100*per) 부분

# gcc testlog.c -S 
.L6:
movl -4(%rbp), %ecx
movl $1374389535, %edx
movl %ecx, %eax
imull %edx
sarl $5, %edx
movl %ecx, %eax
sarl $31, %eax
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
imull -12(%rbp), %eax
cmpl -8(%rbp), %eax
jne .L5

이랬던 코드가
-O2옵션을 주게되면

#gcc testlog.c -S -O2
.L7:
imull $1231, %edx, %eax
movl %edx, %ebp
cmpl %ebx, %eax
jne .L5

 
 이렇게 줄어들게 된다.

ps. 원래 의도한게 이게 아니였는데 
당연한 글이 됐다.

 
반응형

'Program Language > C(lib)' 카테고리의 다른 글

fopen fgets strcpy sprintf  (0) 2011.11.22

댓글