2009년 1월 4일 일요일

1비트 절약도 기술이다.

컴퓨터의 컴퓨팅파워와 날이 갈수록 좋아짐에 따라, 요즘에는 사용되는 메모리나 저장공간등에 신경을 많이 안쓰고 쉽게 프로그래밍한다. 그러나 불과 10년전만 해도 몇 바이트 아끼려고 코드에서 선언된 변수를 다른 목적으로 재사용하기도 했다.

컴파일러 기술이 날이 갈수록 증가함에 따라, 코드최적화 단계에서 사용되지 않은 변수와 메모리 공간을 최소화할 수 있는 형태로 코드를 변경해주는 것도 물론 아주 좋은 현상이다.

보통 우리가 프로그래밍을 할때! 정말 신경써서 하는 부분이 있다. 효율적인 알고리즘 구성과!알고리즘의 버그 찾기! 코딩도 이쁘게! 디자인 하듯이! 그리고, 덩치큰 프로타입부터 그리고, 작은 프로토타입정의! 변수 이름 알아보기 쉽게~! 등등,,
물론 많은 프로그래머가 이런것들에 신경쓰면서 프로그래밍 하는걸로 알고있다!

얼마전에 읽은 책 "누워서 읽는 알고리즘" 에 보면 이런 말이 나온다!
'소설책 쓰듯이! 코딩하는건 작가가 책을 쓸때 독자를 생각해서, 읽기쉽고 이해하기 쉽게글을 쓰는것과 같다. 코드는 소설처럼 읽기쉬워야 한다'
-그레그리롤린즈 박사


물론, 읽기쉽게 짜야 된다. 생산성을 극대화 시킬수 있고, 모듈단위로 분업화된 프로젝트일수록 더욱 그렇다. 그렇지만! 많은 프로그래머들이 간과하고 있는 또다른 중요한게 있다. 바로 메모리 관리이다. 1bit의 차이도 효율면에선 큰 차이다.

그런 면에선 모바일 소프트웨어 개발자들이 너무 존경스럽다. 그 열약한 환경에서도,,변수의 수를 최대한 줄이고, 최대한 많은 데이터를 컨트롤하는면이 '신'이라 판단된다.

우리대학교에 어느 교수님은 내가 2학년때, 좋은 강의를 많이 해주셧는데, 특히 인상적인 강의가 있었다. 바로 문제해결시간에 얘기해주신 메모리 확보에 관한 내용이었다. 가장 빨리 레포트를 제출하는데 의의를두기보다, 속도가 느려도 좋으니 최소한의 메모리를 사용해서 문제를 풀라는 것있다.문제들중에서 지금 생각나는 문제는 이 문제다...

"문제" 문자열을 입력받아서 반대로 출력하는 프로그램을 작성하라! 메모리공간에 신경써라!
ex) hello -> olleh

대부분의 학생들은
/* swap을 이용한다. */
void swap(char a,char b) // 정의완료
void reserve(char in[]){
for(i=0;i


이와 같은 답을 작성하였다. 그런데 아쉽게도 이런 풀이 방법은 10점만점에 7점밖에 맞을 수 없었다. 더 좋은 해결책은 무엇일까?

댓글 없음:

댓글 쓰기