vs2008 디버깅 모드와 디버깅하지않고 시작 시 실행 속도차이..

gloomyr의 이미지

참 답답하네요..

일단 기존 개발된 프로그램은 32비트 윈도우 7에서 개발되었습니다.

이프로그램을 64비트 윈도우7에 설치하고 실행하니 딜레이가 생깁니다... 뚝 뚝..

그렇지만 디버깅모드로 실행하면 끈기지 않습니다... 디버깅하지앟고 시작 이나 응용프로그램을 바로시작하면 딜레이가 생깁니다...

예를들어 함수의 수행 속도가

디버깅모드및 32비트 운영체제에서는 31, 31, 32,31,32,32 이런식으로 일정하게 나온다면

디버깅하지않고 시작이나 응용프로그램을 직접실행하면 31,31,32,208, 31,31,32,204 이런식으로 확 딜레이가 생깁니다..

프로그램은 openGl 그래픽 프로그램입니다...

뭐때문에 그럴까요.. 죽겟네요.. ㅠㅜ

mirheekl의 이미지

비주얼 스튜디오에는 프로파일링 툴이 내장돼있습니다. 릴리즈 모드 프로그램도 물론 프로파일링 가능하고요.

그걸 사용해서 결과를 얻어보시면 어느쪽에서 문제가 생기는지 비교적 쉽게 파악하실 수 있을 겁니다.

http://msdn.microsoft.com/en-us/magazine/cc337887.aspx

제 생각에는 초기화가 완전하지 않다든지 (디버그 모드와 릴리즈 모드는 메모리 할당 동작에 차이가 있음), 메모리관리가 불완전하여 버퍼 오버런 등이 일어났다든지, 링크된 라이브러리 일부가 디버그로 빌드된것이든지 하는 사소한 이유때문일것 같네요.

--

klenui의 이미지

메모리 초기화 안했다에 한표 던집니다.

gloomyr의 이미지

초기화라고하시면 어딜 생각하시는지..

관련되서 사용되는 변수에는 malloc으로 받아서 쓰고 있습니다.

=============

일단 어느정도 끈김현상은 해결했습니다.

glRectf() 로 너무 많이 그리고 있어서 조금 수정하니 속도는 조금 빨라졌습니다.

하지만 아직까지 뚝 뚝 끈기는 느낌이 있네요..

klenui의 이미지

일단 코드를 보지 않고 하는 말이라 너무 심각하게 생각하실 필요는 없습니다...

다만, 일반적으로 debug 빌드는 optimization을 끄고 하는 경우가 대부분이라(최적화가 일정단계 이상되면 소스에 기술된 순서와 코드가 실행되는 순서가 달라져서 디버깅시에는 옵션을 끄는게 상식입니다.) debug가 더 빠르다는건 뭔가 버그가 있다고 생각하는 게 보통입니다.

디버그 모드에는 없는데 릴리즈 모드에서 있는 버그라면.. 앞서 언급되었던 것 처럼 라이브러리 문제이거나 #ifdef _DEBUG 로 묶인 부분의 차이라던가 메모리 초기화 문제.. 거의 이 세가지 중 하나일겁니다.

malloc은 초기화 되지 않은 메모리를 리턴합니다. 그래서 malloc으로 받는 메모리에 값을 바로 덮어 쓸것이 아니라면 memset으로 초기화해주는 게 일반적입니다. 다만 MSVC는 디버깅 모드에서 stack영역을 미리 0으로 초기화해주기때문에(stack이 넘치는 걸 디버깅하기 위해 0으로 초기화하고 끝부분에 magic 코드를 써둡니다. magic 코드가 변조되면 스택이 넘친거죠..) 초기화하지 않아도 되는 듯 보이게 되는 겁니다.

위와 같은 논리로 메모리 초기화 문제가 아닐까..라고 말씀드린겁니다.
답답하실때 너무 가볍게 이야기한 듯해서 죄송합니다만...
그냥 일반론으로 받아들이셨으면 합니다...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.