분류 | 게시판 |
베스트 |
|
유머 |
|
이야기 |
|
이슈 |
|
생활 |
|
취미 |
|
학술 |
|
방송연예 |
|
방송프로그램 |
|
디지털 |
|
스포츠 |
|
야구팀 |
|
게임1 |
|
게임2 |
|
기타 |
|
운영 |
|
임시게시판 |
|
코딩하는 방법에 대한 것은 아니구요.
자료구조 관점에서 함수포인터를 이용한 함수호출과
그냥 함수호출과의 수행시간에 대해서 질문합니다.
제가 생각하기에는 함수포인터는 포인터 변수에 저장된
주소를 이용하여 한번 더 찾아가는 방식이므로,
보통의 함수 호출보다 수행 시간이 더 오래 걸릴 것으로 예상됩니다.
현업에서 수행시간에 민감한 부분이라 그렇습니다만,
간단히 설명하면 아래와 같은 상황입니다.
<리눅스 드라이버 코드>
////////////////////////////////////////////
static int flag = 0;
void func(void)
{
if (flag)
true_func();
else
false_func();
}
EXPORT_SYMBOL(func);
void config_func(void)
{
flag = 1;
}
EXPORT_SYMBOL(config_func);
///////////////////////////////////////////
위의 코드가 아닌 다른 드라이버 코드에서 위의 func()을 계속 호출합니다.
처음엔 flag의 초기값으로 인해 false_func()이 계속 호출됩니다.
그러다 임의로 config_func()을 호출하게 되면,
이 후로는 true_func()이 호출 되는 방법입니다.
위와 같은 경우 func()을 호출 했을 때 true이든 false이든 무조건
if문을 수행해야 하는 구조입니다.
아래의 코드는 함수포인터를 사용했을 경우입니다.
////////////////////////////////////////////
void (*func)(void) = false_func;
EXPORT_SYMBOL(func);
void config_func(void)
{
func = true_func;
}
EXPORT_SYMBOL(config_func);
///////////////////////////////////////////
위의 코드에서도 마찬가지로 외부에서 func()을 계속 호출합니다.
함수포인터의 초기 값은 false_func()의 주소로 맵핑되어 있습니다.
그리고 마찬가지로 임의로 config_func()을 호출한 이후부터는 true_func()이 호출될 것입니다.
위의 경우 if 문을 생략한 방법이므로 분기문의 수행시간이 필요하지 않습니다.
파이프라인에서도 실행 시간에 가장 취약하다는 분기문을 생략한 것이므로,
함수포인터를 이용하는게 수행 시간이 더 빠르지 않을까 생각합니다.
구글에서 관련 자료를 찾아보았는데, 대부분 함수포인터 사용법에 대해서만 나오고
자료구조 관점에서 설명한 것은 찾기가 어렵네요. (자료 검색 능력이 떨어지는 것일 수도..)
혹시 관련 지식을 알고 계신분 계신가요?
죄송합니다. 댓글 작성은 회원만 가능합니다.