lswoo3021   5년 전

운 좋게 아래 반례를 해결해서 2번제출만에 풀었습니다. 

6 4 7
8 5 0
3 2 1

-> 31 

그런데, 로컬에서 돌렸을 때는 거의 12초만에 돌아가서 걱정했는데 

시간초과여부를 확인하기 위하여 제출하니 통과되더군요.. 300 ms정도 나왔습니다. 

debug모드와 release모드 간에 어떠한 차이때문에 이렇게나 많이 시간차이가 나는지 질문드립니다. 

release모드에서는 내부 변수를 확인 할 수 있는 기능도 아예 제한돼서 그런가 생각했는데,

break포인트 걸고 release로 돌려도.. 변수추적도 가능하고 debug와는 큰 차이점을 모르겠어서요 .. 

궁금하네요~~

제 로컬에서 debug는 12초, release는 500ms 이내로 결과가 나오는 것 같습니다. 

djm03178   5년 전

릴리즈 모드의 경우 컴파일러는 다양한 최적화를 수행합니다. 불필요한 문장을 지우고, 반복되는 계산을 하나로 줄이거나, 파이프라이닝의 효율을 위해 연산의 순서를 바꾸기도 합니다.

반면에 디버그 모드는 그런 작업을 일절 하지 않고 코드에 써있는 그대로를 번역할 뿐 아니라, 문제가 발생했을 때 캐치할 수 있도록 특정한 값들을 메모리 사이에 껴넣기도 하고 STL의 경우는 아예 디버그 모드에만 추가되는 코드들이 있습니다. 이런 것들을 수행하는 데에 많은 시간이 걸리게 됩니다.

lswoo3021   5년 전

@djm03178 아하 그렇군요!! 눈에 보이지 않아도 release 모드는 코드 최적화를 수행하는점. 디버그 모드는 메모리상에 값들을 추가하기도 하고 일부 코드가 추가되기도 하는 군요!! 

결론은 케바케이기 때문에 정확한 실행시간을 알려면 release로 돌려보는 수밖에 없겠군요 !! 감사합니다ㅎㅎ 어느새 보라색이 되셨군요...

전에도 질문 올려서 많은도움 받았는데 늘 감사하게 생각하고있습니다!! 예전보다는 저도 풀이수준이랑 질문수준이 조금 나아진 것 같아 기쁘네요 ㅎㅎ 감사합니다 새해복 많이 받으세요 :)

djm03178   5년 전

보라색이 오렌지보다 안 좋은 겁니다 ㅠㅠ

lswoo3021   5년 전

@djm03178  아 ... 이런 ...ㅋㅋ 송구하네욥,,, 아무튼 새해복많이 받으십사 하는게 제 뜻인거 아시죠 

댓글을 작성하려면 로그인해야 합니다.