오늘은 for(count=0; count <10000; count++) VS 노가다 타이핑 10000번입니다.

뭔 소린지 모르겠다 하시는 분은 아래 소스를 봐주세요.

for(count=0;count<10000;count++)


그냥 10000번 (파일첨부로 수정)


파일정보 스샷


for문.


무작정 10000번
몇배차이?

결론은
컴파일러는 멍청이.

이 글이 유익하다면 (굽신굽신) ->
Tag // , ,

Trackback Address >> http://zfanta.com/trackback/347 관련글 쓰기

  1. Subject: 코드 최적화, 어떻게, 왜 하는걸까?

    Tracked from Studying the Logical World. 2009/06/03 00:08  delete

    아... 비가 쩔어주게 오네요. 책 제본뜨러 가야 하는데;; ---------------------------------------------------------------------------------------- 요즘은 컴퓨터가 워낙에 빨라져서 코드 최적화에 대해 대학이나 여타 여러곳에서 잘 언급을 하지 않는 것 같습니다. 그래도 KOI 준비하는 학생분들은 시간적 옵티마이즈에 목숨을 걸지요 =ㅁ= 최대한 빠르게 동작해야 하니까요. 예전의 느린..

  1. 2008/02/22 17:35  address  modify / delete  reply

    비밀댓글입니다

    •  address  modify / delete 2008/02/22 23:21 Favicon of http://zfanta.com BlogIcon 환타

      for문과 무작정 출력 10000번, 두 프로그램의 기능은 같은데 용량 차이가 많이 난다는 점에서 멍충이란 단어를 썼습니다. ㅇㅅㅇ

  2. Favicon of http://bluenlive.net BlogIcon bluenlive 2008/02/22 17:43  address  modify / delete  reply

    저런 경우에도 local 최적화를 전혀 하지 않는군요.
    컴파일러 멍청이 동감.

  3. Favicon of http://quitrin76.tistory.com BlogIcon QuitriN 2008/02/22 17:51  address  modify / delete  reply

    어떤 컴파일러에게 어떤 옵션을 주셨나요? 단순히 컴파일러 멍청이라는 멘트는 이해 할 수 없군요.

    •  address  modify / delete 2008/02/22 23:26 Favicon of http://zfanta.com BlogIcon 환타

      똑같은 기능을 하는 프로그램인데, 용량차이가 많이 난다는 점에서...... 제가 틀린 건가요? 흑ㅜㅜ

  4. Favicon of http://dlbo.tisroty.com BlogIcon Lonewolf dlbo 2008/02/22 18:20  address  modify / delete  reply

    수고 많으셨습니다 ㅁ_ㅁㅋㅋㅋㅋㅋ 최적화가 전혀 안된듯....;;;

    코드 길이 땜시 드래그해다가 보기 겁나네요 ㅎㄷㄷ

  5. ChuRack 2008/02/22 19:06  address  modify / delete  reply

    저도 단순히 컴파일러 멍청이라는 멘트에 동감이 안 가네요... 어떤 의미에서 멍청하다는 것인지...

    •  address  modify / delete 2008/02/22 23:30 Favicon of http://zfanta.com BlogIcon 환타

      똑같은 기능을 하는 프로그램이 컴파일러마다 용량차이가 왔다 갔다 해서요. (ㅇ_ㅇ)a.....

  6. ChuRack 2008/02/22 20:34  address  modify / delete  reply

    소스는 봤습니다... 대략 9배 정도 차이가 나네요... 그런대 왜 멍청이라는 건지..@_@ 아직도 이해를 못하겠습니다....

  7. 멍청이 2008/02/22 23:30  address  modify / delete  reply

    exe 포멧을 이해하는지..
    컴파일 옵션은 다 이해하는지... ㅉㅉ

    •  address  modify / delete 2008/02/22 23:34 Favicon of http://zfanta.com BlogIcon 환타

      저는 아직 그정도 실력은 안됩니다. 하하하하
      지적 감사합니다.

    •  address  modify / delete 2008/02/22 23:36 Favicon of http://dlbo.tistory.com BlogIcon dlbo

      ..... PE파일형식(exe포멧이라 하시는걸로 추정합니다만... 윈도우의 모든 파일 형식은 PE포맷이죠. VS 시리즈는 PE타입으로 만듭니다. 닷넷이 아닌 이상.)이나 여타 타입은 모든 파일에 공통적으로 들어갑니다. 파일의 용량을 결정하는건 내부 코드의 형태죠. 사실 저기 10000회짜리 코드는 기계어 코드로 변환시 최적화를 통해 위의 for문형과 같은 형태로 최적화가 가능합니다. 사람이 했다면 같은 기능이니 같은 형태로 최적화 시켰겠죠. 다만 여기서 컴파일러가 최적화를 안 시켰기 때문에 용량차이가 저리 된겁니다. 뭐 말씀대로 컴파일 옵션 문제도 있겠지만.... 저정도는 옵션 따로 안잡아줘도 알아서 최적화 시켜주는게 매너죠 -ㅁ-

    •  address  modify / delete 2008/02/22 23:42 Favicon of http://zfanta.com BlogIcon 환타

      우와........
      저는 언제쯤........

    •  address  modify / delete 2008/02/22 23:49 Favicon of http://bluenlive.net BlogIcon bluenlive

      dlbo 님 말씀이 맞습니다.
      컴파일러 과목 수업 들어보면, 이런 최적화는 대부분의 컴파일러에서는 다 수행한다고 가르쳐주십니다.
      (역시 이론은 실제와 다르다는 거...)

      여러가지 문제가 생길 수 있기 때문에 컴파일러가 조심할 수는 있지만, 그래도 이 정도는 해줘야 매너죠.

  8. Favicon of http://bluenlive.net BlogIcon bluenlive 2008/02/22 23:34  address  modify / delete  reply

    VC++ 6.0에서 컴파일해보니 printf() 함수 호출은 10000번 들어가도 zfanta.com 문자열은 딱 1번 들어가는군요.
    (기본 옵션/release 모드)
    내용이 똑같으면 돌리는 것도 코드 단위에서 최적화해주면 좋을텐데...
    그래도 문자열 10000번 안 들어가니 110,000 바이트 절약했네요.

    •  address  modify / delete 2008/02/22 23:41 Favicon of http://dlbo.tistory.com BlogIcon dlbo

      110,000바이트 ㅁ_ㅁ!ㅋㅋ 혹시 역어셈 변환코드도 보셨나요? 제 놋북서는 지금 드래그 할때마다 렉걸려서 못해보고 있답니다;;

    •  address  modify / delete 2008/02/22 23:43 Favicon of http://zfanta.com BlogIcon 환타

      역어셈코드?올리디버거로 보는 거 맞나요?
      올리디버거는 재밌다가도 정신줄놓는 아이템인 것 같아요 ㅎㅎ

    •  address  modify / delete 2008/02/22 23:46 Favicon of http://bluenlive.net BlogIcon bluenlive

      디스어셈까지 돌린 것은 아니고요, 그냥 똑같은 코드가 계속 반복되더군요. 한 10,000번 정도 ㅋㅋㅋ
      굳이 디스어셈블 안 해도 fprint() 호출하는 녀석일 것이라 추측 가능하구요.

      zfanta님 글 보면 dev-c++로 한 것 같고, 저는 VC++6으로 했으니, 꽤 괜찮은 컴파일러들이 이런 기본적인 로컬 최적화를 거의 안한다는 것을 보여주는군요...
      누가 gcc로 돌려보고 결과를 올려주시면 재미있을 것 같습니다.

    •  address  modify / delete 2008/02/22 23:51 Favicon of http://dlbo.tistory.com BlogIcon dlbo

      제 빌어먹을 노트북 님께서 리눅스를 받아들이질 않아서 안타깝습니다. gcc로 시도해보고 싶은데; 그리고 disassembly 기능은 VC6에서 디버깅 윈도우 옵션중에 낑겨있답니다. 지금 이클립스의 C++에서는 어찌 될 지 궁금.... -_-;

    •  address  modify / delete 2008/02/22 23:51 Favicon of http://bluenlive.net BlogIcon bluenlive

      지금 release 모드에서 크기 최적화로 해놓고 돌려봤는데, 전혀 차이가 없군요.
      VC++6은 local optimization 매너가 영 꽝입니다그려...

    •  address  modify / delete 2008/02/22 23:55 Favicon of http://dlbo.tistory.com BlogIcon dlbo

      마소는 뭐 저런거 신경 쓸 틈이 있을까요 -ㅁ- 이런 독특한 일을 해 보는 사람은 게이머나 프로그래머나 전부 한국인들이라죠 ㅋㅋ 전에 와우 베타때도 블리자드가 금지구역에 몰려드는 한국인에 놀라서 뒤늦게 대응했었는데;;

    •  address  modify / delete 2008/02/23 00:20 Favicon of http://zfanta.com BlogIcon 환타

      채..채팅창이다 ㅇㅅㅇ
      한국인 덕분에 버그없는 게임이 만들어진다죠 ㅋㅋ
      그리고 버그 패치 해놓으면 가만히 있지 못하는 한국인이라죠 ㅋㅋ
      이건 뭐...

    •  address  modify / delete 2008/02/23 00:36 Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo

      ㅋㅋ 어쩌다보니 진짜 채팅창이 됐군요.
      뭐 어쨌든 이런 시도가 어이없는 버그를 최대한
      줄일수 있는 가장 험난하고도 좋은 방법이죠.

    •  address  modify / delete 2008/02/23 00:38 Favicon of http://bluenlive.net BlogIcon bluenlive

      코딩할 때 컴파일러 믿고 무식하게 짠 적 많았는데, 컴파일러에 대한 불신이 더 커지는군요.
      아뭏든, zfanta님과 dlbo님 덕분에 재미있었습니다.

    •  address  modify / delete 2008/02/23 00:40 Favicon of http://zfanta.com BlogIcon 환타

      이번실험 하나 하고 소재가 다 떨어졌습니다;;;;
      또 무슨 프로그램을 따라만들어볼까요? ㅎㅎ
      dlbo님, bluenlive님 주무셔야죠.ㄷㄷㄷ

    •  address  modify / delete 2008/02/23 00:50 Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo

      덕분에 재미있게 글남기다 갑니다 ㅁ_ㅁa 취-_-업좀 할까 해서 개인 프로젝트 기획이랑 MFC책좀 보다가 늦은 시간까지 왔네요 ㅁ_ㅁㅋ 스레-_-드를 최대 몇개까지 나눌 수 있는가도 한번 체크해 보세요 ㅋㅋ

    •  address  modify / delete 2008/02/23 00:55 Favicon of http://zfanta.com BlogIcon 환타

      스레-_-드라면 중괄호 블럭비슷한 건가요?
      정확한 개념을 몰라요 ㅇㅅㅇ 흐호흐후후

    •  address  modify / delete 2008/02/23 01:06 Favicon of http://bluenlive.net BlogIcon bluenlive

      스레드를 나눈다는 말씀은 이해가 좀 안 가네요...
      정확히 어떤 뜻인가요?

  9. Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo 2008/02/23 01:43  address  modify / delete  reply

    자러 갔다가 잠이 안와서 도로 돌아왔답죠 -_-; 여러 프로세스를 동시에 돌리는걸 멀티태스킹, 프로세스 내에서
    독립적인 스레드를 여러개 돌리는걸 멀티스레딩이라 부르지 않습니까?; 제가 독학으로 한 터라 일반적인 용어에는
    좀 덜 익숙한 편입니다;; 개인적으로 스레드를 단일이 아닌 여러개 설정할 경우를 스레드를 나눈다고 부릅니다.

    •  address  modify / delete 2008/02/23 15:25 Favicon of http://bluenlive.net BlogIcon bluenlive

      아... 저도 스레드를 씁니다. (가~끔씩)
      저는 '스레드로 나눈다'고 주로 표현하는데,
      '스레드를 나눈다'고 하시니 다른 뜻인가 하고 생각했습니다.

      좋은 프로젝트 같은데요...
      printf()로 숫자(카운터) 출력하는 함수를 스레드로 빼서 세마포어 락 걸고 10000번 호출하기.

    •  address  modify / delete 2008/02/23 15:46 Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo

      스레드의 분할당 시간을 고려해 printf대신 딜레이를 넣어주는게 체크하기 쉽지 않을까 하는 생각이... 그리고 프로젝트는 OS개발입니다 ㅁ_ㅁ;

    •  address  modify / delete 2008/02/23 16:00 Favicon of http://bluenlive.net BlogIcon bluenlive

      아... 메모리 관리자를 직접 개발해야겠다는 댓글도 요 위에 있었죠...
      zfanta님 홧팅!

      잘만 하면 졸업과 동시에 대학원 연구실로 특채되어 갈 것 같다는 예감이...

    •  address  modify / delete 2008/02/23 16:28 Favicon of http://zfanta.com BlogIcon 환타

      스레드 어 그 뭐냐. 한 프로세스 내에 실행되는 여러가지 어쩌고 저쩌고... 방금 찾아보니 대충 뭔지는 감이 오네요. 다음 실험주제는 뭘로할까요?????????? 소재구걸중...

  10. Favicon of http://bluenlive.net BlogIcon bluenlive 2008/02/23 16:34  address  modify / delete  reply

    스레드에 대해 공부해보시는 것도 좋을 것 같습니다.

    일단, 스레드를 2개 만들고, 전역변수를 2개 잡습니다.
    스레드 1에서는 변수 1의 값을, 스레드 2에서는 변수 2의 값을 계속 바꾸게 두는 것입니다.

    그리고는 메인함수에서는 이 전역변수 2개의 값을 읽어 화면에 계속 뿌려주게 하면
    (정상적으로 두 스레드가 잘 돌아가는 경우에는) 값이 계속 바뀌게 됩니다.

    이런 방식으로 하나 만들어 포스팅해보시는 것도 좋을 듯 합니다.
    (메모리 관리자는… 농담입니다. ㅎㅎㅎ)