http://cafe.naver.com/cafec/360394
정적할당
소스코드를 기계어로 변환할 때 필요한 메모리의 량(혹은 크기)를 계산하여 스택이나 혹은 힙에 메모리를 마련합니다.
동적할당
프로그램을 실행 중일 때 메모리의 량(혹은 크기)만큼 요청하여 힙에 마련합니다.
메모리를 할당하는 사이즈를 결정하는 시간의 차이입니다.
C99이전의, 컴파일러가 불친절하였을 경우에는
void func(int a)
{
int b[a];
}
이러한 코드는 컴파일할 수 없었습니다. a의 크기가 상수가 아니여서 소스코드를 기계어로 변환할 때 필요한 메모리의 양(혹은 크기)가 정해지지 않기 때문에 메모리를 마련할 수 없기 때문입니다.
https://ko.wikipedia.org/wiki/동적_메모리_할당
C99이후에는 (비주얼스튜디오는 C99표준을 지원하지 않습니다 GCC에서는 가능) 위와 같은 함수에서 컴파일 오류가 나지 않습니다. 컴파일 도중에 정적할당이 아닌 동적할당하는 기계어로 변환하기 때문입니다.
이라고 답해봤는데 맞을까?
혹 저거 오류 안 나나요?
C99에서는 오류 안남
구렇군요..
음 근데 C99의 가변 길이 배열 저거는 스택에 저장하긴 하는데 흠...