#include <alloca.h>
int func(const char* tail) {
const char *str = "temporal string";
char * fullstr;
fullstr = alloca(strlen(tail)+strlen(str)+1);
strcpy(fullstr, str);
strcat(fullstr, tail);
/* do something */
return 0;
}
주의할 사항은 이렇게 alloca로 할당된 메모리 영역을 함수 호출시에 인자로 사용해서는 안된다는 것이다. (다른 함수 호출시 alloca로 할당 받은 스택 영역은 push 되니까!) 그리고 alloca()는 그다지 portable하지 않으므로 사용에 주의할 필요가 있다. 그러나 메모리 해제가 필요 없다는 점, 할당시 malloc에 비해 오버헤드가 적다는 점에서 자주 사용할 수 있는 유용한 함수이다.
스트링을 스택 메모리에 복사해서 사용하는 경우도 있는데, 이를 위해서 Linux에서 제공하는 함수로 아래와 같은 것들이 있다(POSIX에서는 제공하지 않는다)
#define _GNU_SOURCE
#include <string.h>
char * strdupa(const char *s);
char * strndupa(const char *s, size_t n);
예상되다시피 스트링을 스택 메모리에 복사한 후 포인터를 넘겨준다.
No comments:
Post a Comment