GREAT CODE 2: 로우레벨을 고려한 프로그램 최적화 책과이야기



'GREAT CODE 2: 로우레벨을 고려한 프로그램 최적화' 조금 전부터 읽기 시작했습니다. 조금 전 1장을 다 읽었는데(그래봐야 10페이지;;) 책의 부제인 '로우레벨을 고려한 프로그램 최적화'가 1장의 제목이기도 합니다. 그런 의미에서 1장은 책 전반에 대한 이야기와 로우레벨을 고려해서 프로그램을 최적화 해야하는 이유, 컴파일러가 해주는 최적화가 만능인 아니라는 것을 강조하고, 최적화를 위해 어셈블리어 코드를 최소한 읽을 수는 있어야 한다는 내용을 다루고 있습니다.

내용 중간에 같은 결과를 출력하는 if/elseif/else문과 switch/case문 코드를 예제로 두 코드가 같은 의미로 동작하지만 컴파일러가 기계어로 변환했을 때는 성능의 차이를 보인다고 합니다. 2006년 12월 마소 기사 중에도 박재호님의 'ARM과 파워PC에 기반한 임베디드 프로그래밍 최적화 기법'에서 프로그램 최적화에 대한 몇 가지 기법들을 소개하고 있는데 switch/case 문의 경우에는 case 문의 상수값에 의해서 기계어의 복잡도가 달라지고 실행시간에 큰 차이가 있는 것으르 볼 수 있습니다.

검색 중에 이창연님의 블로그에서 '[C/C++] 너희가 switch 를 아느냐?'라는 글을 찾았는데, 여기에서 switch문을 기계어로 바꾸었을 때 case 상수값에 따른 차이를 자세하게 설명하고 있습니다.

사실 if문과 switch문이 컴파일러에 의해 기계어로 변환 되었을 때 차이가 있다는 것은 알았지만, 책을 읽고 실제로 찾아보다보니 문법간의 차이외에도 switch문의 경우 case 상수값에 따라서도 기계어가 달라질 수 있다는 건 처음 알게 되었네요.

이제는 최근이라고 하기도 어색할만큼 이미 오래 전부터 컴퓨터 사양이 높아지고 옛날처럼 개발자들이 프로그램 최적화에 대한 필요를 전혀 느끼지 못 하고 있습니다. 임베디드 분야에서도 이미 프로그램 최적화는 옛날 이야기가 되어가고 있구요.

하지만 고급 언어를 사용해서 같은 동작을 하는 프로그램을 작성할 경우 기계어(로우레벨)까지 고려해 조금이라도 최적화된 프로그램이 그렇지 않은 프로그램보다는 좀 더 빠르고 효율적으로 동작할 것 입니다. 게다가 덩치가 큰 프로그램의 경우 이런 작은 최적화들이 모이고 모여서(티끌모아 태산이라고도 하죠.) 체감할 수 있을만큼의 성능 개선이 이루어질 수도 있을 것 입니다.

이창연님 글 중 마지막 문장이 참 마음에 들었습니다.
'이런 작은 차이로부터 우리는 명품을 끌어낸다.'

명품 프로그램을 만들 명품 프로그래머가 되는 날까지 부지런히 정진해야 겠습니다. (아직도 갈 길이 멀어요. ㅠㅠ)


꼬랑지. 'GREAT CODE 1'도 어려웠던지 힘들게 읽었는데 이 책도 꾸역꾸역 읽게 될 것 같네요. 대충 훓어보기만 했는데도 어질어질 ^^;;

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://grow.egloos.com/tb/3874197 [도움말]
  • 지아의 생각 2008/09/09 19:57 #

    블로그 리퍼러를 확인하다가 KLDP를 통해 들어온 흔적이 있길래 봤더니 Great Code 2권에 대해 쓴 글이 링크되어 있었다. 링크에 링크를 따라갔다가 당췌 뭔 소릴 이렇게 어렵게 했는지, 하나도 알아 먹지 못 하겠는 글을 하나 발견.... more

핑백

덧글

덧글 입력 영역