VLA는 뭘까?
이름이 동적 할당이므로 런타임에 크기를 정하는 것, 또는 런타임에 할당받는 것으로 생각하기 쉽다.
C의 VLA(Variable Length Array) 역시 런타임에 크기를 정할 수 있지만, VLA는 정적 할당이다.
그런 거 없다
managed/unmanaged 언어라는 말이 그런 것처럼,
정적 할당이라는 말 역시 널리 쓰이고는 있지만 잘 정의된 용어가 아니다.
C의 3가지 메모리 할당
C의 할당은 크게 세가지가 있다.
•
auto
◦
흔히 말하는 정적 할당. 런타임에, 주로 스택에 할당됨
◦
보통 크기는 컴파일 타임에 결정되긴 함 (당연히 VLA는 예외)
◦
static, register 등 스토리지 클래스를 지정하지 않으면 자동으로 auto
•
static
◦
진정한 의미의 정적 할당이지만 그 누구도 이것을 정적 할당이라고 하지 않음
◦
컴파일 타임에 크기가 정해지며 런타임에 할당받지 않음
•
... 그리고 동적 할당
◦
malloc, calloc, realloc 등을 호출해서 할당받는 것
◦
스택이 아닌 힙에 할당됨
* 그 외에도 register나 thread_local같은 것도 있다