alloca()의 용도에 대해서

iyouhe의 이미지

alloca()에 대해서 제가 이해한건
이건 메모리가 힙에 잡히지 않고 스택에 잡히므로 프로그램이나 루틴 종료시 free()하지 않아도 된다고 알고 있거든요. 실제로 alloca메로리를 free()시켰는데 그 부분에서 세그멘트 폴트가 나는 경우도 있고요.

특히 가변적인 스트링 비교함수에서 아래와 같은 표현을 쓰는 것을 봤는데 이렇게 하면 빠른가요?

int
fnmatch (const char *pattern, const char *string, int flags)
{
register char *p, *pat, *n, *str;
register char c;

strcpy(n = alloca(strlen(string)+1), string);
str = n;
strcpy(p = alloca(strlen(pattern)+1), pattern);
pat = p;
.......

그냥 배열도 스택에 쌓아두는 건데 꼭 alloca가 가변적인 것 빼고 좋은 점이 있는지 알고 싶네요.

pynoos의 이미지

위와 같은 방법으로는 사용하지 말라는 군요...

참고하세요..

http://www.gnu.org/manual/glibc-2.2.5/html_node/Variable-Size-Automatic.html