Wednesday, April 30, 2008

VLA Variable Length Array

C99에서 도입한 것으로 VLA - 가변 길이 배열이 있다. 알다시피 일반적인 배열은 compile time에 해당 영역이 고정된다. 그러나 함수안에서 가변으로 배열을 선언하면 VLA로 잡히는데, (확실치는 않지만) 스택에 잡힌다. 아래와 같이 VLA를 사용할 수 있다.

for (i = 0; i < n; ++i) {
char foo[i+1];
/* ... */
}

거의 둘이 흡사하나, alloca와 VLA가 다른 점이 있다. alloca로 스택에 잡은 메모리는 함수가 리턴하는 시점에 해제되지만, VLA의 경우는 위 코드와 같이 for loop을 벋어나는 순간, 즉 scope를 벗어나는 순간 해제 된다(위의 경우에 alloca를 사용한다면 loop을 도는 수만큼 공간을 사용했을 것이다).

No comments:

Post a Comment