malloc, calloc은 메모리 동적할당에 쓰인다. 아래를 보자. int N=4; int arr[N]; //int arr[4]; 위의 코드는 실행 가능할까? C언어 컴파일러의 버전에 따라 실행 가능 할 수도 있고 가능하지 않을 수도 있다. VLA를 지원하는지 하지 않는지에 따라 다르다. C99버전에서는 VLA를 지원하나 구버전에서는 기대할 수 없다. 구버전을 예로 든다면 아쉽게도 에러가 난다. 배열은 변수로서 선언할 수 없기 때문이다. 왜 안되는 걸까? 메모리 구조를 먼저 알아야한다. N이 지역변수임을 가정하면 N에 대한 메모리크기는 컴파일타임에 정해진다. 4byte일 것이다. 그러나 N의 값이 4라고 인식되는 것은 컴파일타임이 아닌 런타임이다. 따라서 프로그램이 수행되어야 한다는 뜻이다. 마찬가지로..