lilo.c에서 !! 관한 토론?

오시리스 2011.07.25 23:01 조회 수 : 34354

lilo.c 를 보면서, 잠깐 이야기 되었던 것중 하나입니다. 별로 중요하지 않은 내용인데, 괜히 올리는 것 같기도 하고 그렇지만, 노섭님께 올려보겠다라는 말을 했던터라, 그냥 올려 봅니다 ^^;;


int func() {

  int t = 100;

  return !!t; <---(1)

  //return t; <---(2)

}


void main() {

  int ret = func()

  if(ret) <---(3)

    printf("func()n");

}


코드에서 굳이 !!를 써줄 이유가 있을까가 원인이었는데, 성노섭님께서 "if대신 bit연산이 2사이클 정도 빠릅니다"라는 말이 이해가 가지 않아, 서로 이야기 해본 결과, 다른 부분에 초점을 맞추고 이야기를 했다는것을 알았습니다. 저같은 경우엔 "그렇다면 c코드 상에서 2번인 경우가 더 빠르지 않는가?" 라는 것이였고, 노섭님은 "return 할때, if문(?: 연산자)을 사용하지 않고, bit로 직접 0,1로 바꿔주기 때문에 2사이클 정도 빠르다는 이야기였습니다." 저는 3번 쪽의 if문에서는 똑같은데, 굳이 그렇게 쓴 것이 이해가 가지 않아서였는데, 결국엔,1,0으로 바꾸는 것은 lilo config 를 위해서 flag를 써주기 비교해주기 위해서 였습니다.


objdump를 해본 결과 (1)이 들어간 경우가 명령어 코드가 2개 더 늘어나 있었는데, 실제론 더 빠르게 되는건지는 잘 모르겠습니다.


 (2) return t;

 (1) return !!t;

...상략...

00000000004004f4 <func>:

  4004f4:       55                      push   rbp

  4004f5:       48 89 e5                mov    rbp,rsp

  4004f8:       c7 45 fc 64 00 00 00    mov    DWORD PTR [rbp-0x4],0x64

  4004ff:       8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]

  400502:       c9                      leave

  400503:       c3                      ret


0000000000400504 <main>:

  400504:       55                      push   rbp

  400505:       48 89 e5                mov    rbp,rsp

  400508:       b8 00 00 00 00          mov    eax,0x0

  40050d:       e8 e2 ff ff ff          call   4004f4 <func>

  400512:       85 c0                   test   eax,eax

  400514:       74 0a                   je     400520 <main+0x1c>

  400516:       bf 1c 06 40 00          mov    edi,0x40061c

  40051b:       e8 d0 fe ff ff          call   4003f0 <puts@plt>

  400520:       b8 00 00 00 00          mov    eax,0x0

  400525:       c9                      leave

  400526:       c3                      ret

<meta http-equiv="content-type" content="text/html; charset=utf-8"> ...하략...

...상략...

00000000004004f4 <func>:

  4004f4:       55                      push   rbp

  4004f5:       48 89 e5                mov    rbp,rsp

  4004f8:       c7 45 fc 64 00 00 00    mov    DWORD PTR [rbp-0x4],0x64

  4004ff:       83 7d fc 00             cmp    DWORD PTR [rbp-0x4],0x0

  400503:       0f 95 c0                setne  al

  400506:       0f b6 c0                movzx  eax,al

  400509:       c9                      leave

  40050a:       c3                      ret


000000000040050b <main>:

  40050b:       55                      push   rbp

  40050c:       48 89 e5                mov    rbp,rsp

  40050f:       b8 00 00 00 00          mov    eax,0x0

  400514:       e8 db ff ff ff          call   4004f4 <func>

  400519:       85 c0                   test   eax,eax

  40051b:       74 0a                   je     400527 <main+0x1c>

  40051d:       bf 1c 06 40 00          mov    edi,0x40061c

  400522:       e8 c9 fe ff ff          call   4003f0 <puts@plt>

  400527:       b8 00 00 00 00          mov    eax,0x0

  40052c:       c9                      leave

  40052d:       c3                      ret

  ...하략...

<meta http-equiv="content-type" content="text/html; charset=utf-8">



그리고, 박민규님이 말씀하신,lilo 컴파일 할때의 옵션인 -s 옵션으로 컴파일해서 해봤더니, 마치 inline함수처럼 심볼이 사라지고, 코드가  직접 들어가더군요.

<style type="text/css">::-webkit-scrollbar-track-piece:vertical {background-color:#eee;-webkit-border-radius: 0px;}::-webkit-scrollbar-track-piece:horizontal {background-color:#eee;-webkit-border-radius: 5px;}::-webkit-scrollbar {width: 9px;height: 9px;}::-webkit-scrollbar-thumb{ background-color:undefined; -webkit-border-radius:6px;}::-webkit-scrollbar-thumb:hover{background-color:undefined;!important -webkit-border-radius:6px;}</style>
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2199
1745 x86 interrupt & instruction table file 백창우 2007.02.23 9190
1744 x86 linux booting 과정 file 백창우 2007.02.23 12734
1743 아키텍쳐에 관련된 내용입니다. [6] file 원민수 2007.02.25 7234
1742 논의사항 [7] 백창우 2007.02.26 4657
1741 Power architecture roadmap이라네요. [17] 정필섭 2007.02.26 4817
1740 첫째날에 공부한 내용 정리한번 해보는게 어떨까요?? 여러분의 의견을 묻습니다. [8] file 김정수 2007.02.26 7255
1739 [re] 제본 신청 하실분 댓글 달아 주세요. [17] 정필섭 2007.02.28 4870
1738 Power ISA 2.03 외 기타 문서. [6] 김형진 2007.02.28 5294
1737 [수정] 스터디 문서 분량을 나누겠습니다. [3] 정필섭 2007.03.02 5190
1736 제송.... 제가 이번에 스터디 그룹에 참여하는데 아직 공부할 부분을 할당받지 못했는데요... [2] 강형석 2007.03.02 5261
1735 power architecture의 역사와 미래 [2] file 백창우 2007.03.03 5179
1734 3월 3일 LKSAS 두번째 모임 즐거웠습니다. [7] file 김정수 2007.03.04 5046
1733 x86 아키텍쳐에 관한 동영상 강좌 링크입니다. [6] 남현우 2007.03.04 4413
1732 EM64T_Guide [2] file 이종우 2007.03.04 3502
1731 "만들면서 배우는 OS 커널의 구조와 원리/김범준 저"에 오늘 공부했던 내용에 대해 쉽게 적혀있네요. [4] 김정수 2007.03.04 5380
1730 메신저 주소 공유합시다!! [8] 김정수 2007.03.04 3672
1729 [질문] POSIX 표준 함수들의 소스 [4] 김강년 2007.03.05 5602
1728 분담2 MOVLHPS ~ MOVUPD 까지입니다 선준규 2007.03.06 4851
1727 asm 강좌 문서 file 맥주 2007.03.06 4147
1726 lilo 공부하실때 참고 할만한 자료 입니다. [5] 강형석 2007.03.07 3034
XE Login