디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

가장 기본적인 조건제어문은 do while 입니다

mozzart갤로그로 이동합니다. 2016.04.20 00:41:51
조회 2236 추천 17 댓글 7

가령

int a = 0;

do a++; while( a < 10 );


위 같은 코드는 실제로는 다음과 같이 번역됩니다.

어셈블리 코드로 적으면 낯설테니 그냥 pseudo code로.


a <- 0;

loop:

    a <- a + 1

    if( a < 10 )

        goto loop;


만약


int a;

for( a = 0; a < 10; ++a );


와 같은 코드를 작성하면,

컴파일러가 최적화 하지 않는 경우 다음과 같은 코드로 번역됩니다.


a <- 0;

loop:

    if ( a >= 10 )

        goto next;

    a <- a + 1

    goto loop;

next:


차이를 아시겠어요?

do ~ while 은 3줄짜리 코드. ( 루프의 반복회수가 N 일 때 complexity 3N )

for는 4줄짜리가 됩니다. ( 루프의 반복회수가 N 일때 complexity 4N, 즉 25% 성능차이 )


하지만 컴파일러는 시작 초기화값 상수 0 이 10보다 작다는걸 알기 때문에

최적화를 걸면 for 문을 do ~ while 로 해석해서

세 줄짜리 코드를 만들어 줍니다.


do-while 을 안쓰다뇨.

루프에 들어갈때 조건을 판단하는거랑,

일단 실행하고 루프를 빠져나갈때 조건을 판단하는 구조는

명령어 1개 만큼의 최적화 영향을 받게 됩니다.


// str 이 char* 타입일때

while( *str++ ); 과

while( *str ) str++;


의 차이점도 아셔야 합니다.


전자는 null 문자를 만나고 나서 빠져나올때 하나 더 str 을 증가시키게 됩니다.

후자는 null 문자를 만난 위치에 포인터가 멈춰서게 되죠.

저걸 pseudo 코드로 나열하면, 다시 명령어 하나가 루프안에 더 있고 없고의 차이가 됩니다.

컴파일 되고 나면 *str++ 을 사용한쪽이 반복문 안에서의 명령어가 하나 적게 되기에


size_t strlen( const char* str )

{

    char* ptr = (char*)str;

    while( *ptr++ );

    return ptr - str - 1;

}


이게


while( *ptr ) ptr++; 를 사용해서

return ptr - str; 하는 코드보다 효율적인 코드가 됩니다.


request 를 받아 위의 두 예도 pseudo code 를 작성합니다.

단, 이경우 if 문 형식과 어셈블리 코드가 조금 달라지니

최대한 x86 instruction 에 맞춰 비교구문을 test 라고 하겠습니다.


1. while( *ptr++ ); 의 경우


loop:

    result_flag << test( *ptr, 0 );

    ptr <- ptr + 1;

    if( result_flag.contains( not_zero ) ) goto loop;



2. while( *ptr ) ptr++; 의 경우


loop:

    result_flag << test( *ptr, 0 );

    if( result_flag.contains( zero ) ) goto next;

    ptr <- ptr + 1;

    goto loop;

next:


위와같이 3줄 명령어 루프와 4줄 명령어 루프가 됩니다.

추천 비추천

17

고정닉 1

2

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 며느리, 사위되면 시댁, 처가에 잘할 것 같은 스타 운영자 25/10/13 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
공지 프로그래밍 갤러리 이용 안내 [96] 운영자 20.09.28 47931 65
2896500 캄보디아 대포통장 살인사건은 은행 책임도 있다 발명도둑잡기(118.216) 01:18 0 0
2896499 '19) 여캠 합방 수위 레전드.gif ㅇㅇ(112.167) 01:17 0 0
2896498 'ㅎㅂ' 윤 공주 실시간 라방킴ㄱㄱ 프갤러(175.112) 01:16 1 0
2896488 후스넘버 허위 내리는법 (106.102) 00:56 9 0
2896485 캄보디아 이거 진짜 무섭네 [4] 노력갤로그로 이동합니다. 00:54 32 0
2896484 ( ㅇ ㅅ ㅇ )a [1] 노력갤로그로 이동합니다. 00:54 14 0
2896483 냥덩아 발명도둑잡기(118.216) 00:53 9 0
2896482 지듣노 발명도둑잡기(118.216) 00:44 7 0
2896480 나르시 에이다 빠는거 보니까 예전에 클로저 빠는 아재 있었는데 [1] 박민준갤로그로 이동합니다. 00:35 27 0
2896478 패턴 매칭(Rust) vs. 직접 접근(Ada): 공정한 비교 나르시갤로그로 이동합니다. 00:30 9 0
2896477 제미니의 편향: Ada는 상대적으로 복잡한 것처럼 서술했네 ㅎㅎ 나르시갤로그로 이동합니다. 00:29 9 0
2896475 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 00:28 9 0
2896473 인터넷에서 싸우지 마라 [1] 박민준갤로그로 이동합니다. 00:26 32 0
2896472 "대통령님, '소비쿠폰' 저도 할 말 있습니다" 발명도둑잡기(118.216) 00:26 14 0
2896471 제미니의 러스트 편향성: Addr.Addr_V4'Image 이거 아니잖 나르시갤로그로 이동합니다. 00:25 12 0
2896469 와.. 일본은 브라질 이겻넹 ㄷㅅㄷ ♥덩냥이♥갤로그로 이동합니다. 00:23 14 0
2896468 이재명 "홍석천도 폐업..자영업자 임대료 감면에 정부 나서 달라" 발명도둑잡기(118.216) 00:21 8 0
2896467 Rust 의 Result 가 대체 왜 편하다는 것??? 나르시갤로그로 이동합니다. 00:14 11 0
2896465 제미니마저 Rust에 편향되게 설명하네. ㅎㅎ 나르시갤로그로 이동합니다. 00:12 16 0
2896464 요즘 컴공은 next.js도 가르침? [4] ㅇㅇ(211.196) 00:08 36 0
2896463 멍유야 이것만 알아둬 [2] ♥덩냥이♥갤로그로 이동합니다. 00:04 28 0
2896460 Ada와 Rust 비교: 자료구조, 분기, 오류 처리 철학 [1] 나르시갤로그로 이동합니다. 10.14 16 0
2896458 [공지] 멍퀴벌레 신상 제보 받습니다 현상금 있음 ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896456 최근 영화 <추적>을 발표한 최승호 감독이 발명도둑잡기(118.216) 10.14 9 0
2896455 124.48 점마 진짜 개발지식 일천하노 ㅋㅋㅋ [1] ㅆㅇㅆ(124.216) 10.14 37 0
2896446 멍퀴벌레는 21세기 홍길동이당 By 나님 [4] ♥덩냥이♥갤로그로 이동합니다. 10.14 28 0
2896445 Ada 프로그래밍: 열거형과 선택 구조, 그리고 예외 처리 나르시갤로그로 이동합니다. 10.14 16 0
2896442 Ada 프로그래밍: 3.5 주석 (Comment) 나르시갤로그로 이동합니다. 10.14 9 0
2896439 진중권이 말하는 극좌 [2] ♥덩냥이♥갤로그로 이동합니다. 10.14 20 0
2896435 이거 강의 언제 어디서 듣나요 발명도둑잡기(118.216) 10.14 14 0
2896434 냥덩이는 털바퀴가 된당⭐+ 7화 ♥덩냥이♥갤로그로 이동합니다. 10.14 17 0
2896432 안목 유튜브 보고 스포이더로 똑같이. 넥도리아(220.74) 10.14 15 0
2896431 [공지] 나님.. 이 모든 사태에 대해 책임지고 탈갤합니당.. [1] ♥덩냥이♥갤로그로 이동합니다. 10.14 28 0
2896428 냥덩 도배 발명도둑잡기(118.216) 10.14 18 0
2896427 냥덩아 적당히해 [6] 개멍청한유라갤로그로 이동합니다. 10.14 45 0
2896424 샤미 “K-팝은 더 성장할 것…韓 아티스트 영입 검토” [1] 발명도둑잡기(118.216) 10.14 18 0
2896420 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 10.14 10 0
2896418 [공지]냥덩강점기 종료~ 나님 야구 보면서 잘 놀다갑니당~ ♥덩냥이♥갤로그로 이동합니다. 10.14 26 0
2896417 비선실세 국정농단 의혹 김현지 제보 받습니당⭐ ♥덩냥이♥갤로그로 이동합니다. 10.14 28 1
2896416 와 벌써 시간 이렇게 됐네 잘 준비해야지 [2] chironpractor갤로그로 이동합니다. 10.14 23 0
2896415 김광현 ㅋㅅㅋ ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896414 18년인가 양현종 마무리 우승이 ㄹㅇ 소름끼쳤는데 ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896413 애널 야구 좀 싱겁게 끝나서 아쉽 ♥덩냥이♥갤로그로 이동합니다. 10.14 13 0
2896412 김서현도 공이 빠른건 맞긴한데 제구 구리다던데 ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896411 폰세 막판에 퍼진거 같던데 ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896410 폰세 1차 나오면 삼성 1차전은 버리려나보네 [6] ♥덩냥이♥갤로그로 이동합니다. 10.14 32 0
2896409 타자들이 투수에 익숙해지면 불리 하니까 ♥덩냥이♥갤로그로 이동합니다. 10.14 14 0
2896408 김경문 감독이 우승하려고 폰세 약팀만 보냇다네 ♥덩냥이♥갤로그로 이동합니다. 10.14 13 0
2896407 폰세가 빠따 강한팀은 일부러 빼왓다는데? ♥덩냥이♥갤로그로 이동합니다. 10.14 13 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2