임베디드 소프트웨어를 개발할 때면 자주 부딪히는 내용이 과연 속도에 최적화를 할 것인지, 아님 메모리 사이즈(즉, 이미지 사이즈)에 최적화 할 건지에 대한 고민을 할 경우가 있다. 뭐 여러 가지 다른 옵션이 있겠지만, 여기서는 아래와 같이 테이블을 만드는 것과 함수를 이용하는 것과의 차이를 살펴 볼려고 한다.
아래 내용은 ASCII 코드를 가져 오는 부분이다. 주석 처리된 부분을 풀면 c_table 배열 선언과 매크로 함수 부분을 주석 처리 하면 된다.
[code type=c]#include <stdio.h>
char c_table[128] =
{
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, -1, -1, -1, -1, -1, -1, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, -1, -1, -1, -1, -1
};
#define upper_a(c) c_table[c]
/*
int upper_a(int c)
{
if ( 'a' <= c && c <= 'z' )
return c - 32;
else if ( 'A' <= c && c <= 'Z' )
return c;
else
return -1;
}
*/
int main(void)
{
printf("%c %c %c\n", upper_a('a'), upper_a('B'), upper_a(10));
return 0;
}[/code]
실제 코드가 위와 같으면 ASCII 코드를 가져 오는데, 변수 억세스하는데 걸리는 시간 밖에 안 걸린다. 만약 함수 형태로 이 부분을 구현하면 메모리 공간상에 c_table이 차지하는 부분을 절약할 수 있겠지만, 실행시에 함수를 부르기 위한 작업과 내부 비교 구문등에 시간이 걸리므로 메모리 공간은 절약 하겠지만, 실행 시간은 늦게 된다.
실제 임베디드 시스템 중에서 하드 리얼 타임 시스템을 구현할 경우, 만약 삼각 함수등을 사용해야 할 경우가 있을때도 위와 같이 테이블을 많이 이용하게 된다. 실제 삼각 함수와 같은 수학 함수들은 대부분 정밀도를 위해서 속도 부분을 포기한 경우이다. 때문에 원하는 정밀도의 테이블을 만들어서 테이블 사이에 값이 필요할 경우는 인터폴레이션을 이용해서 구하는 방법을 쓰게 된다.
받은 트랙백이 없고,
댓글이 없습니다.



글
댓글을 달아 주세요
댓글 RSS 주소 : http://www.cipher.pe.kr/tt/cipher/rss/comment/118댓글 ATOM 주소 : http://www.cipher.pe.kr/tt/cipher/atom/comment/118