반응형

VLA 2

[VLA] Variable-length Array, 가변 길이 배열

VLA는 가변 길이 배열이다. 즉, 변수로 런타임중에 배열의 길이를 정할 수 있다는 말이다. 그 말은 즉, 사용자에게 Input을 받고 그 변수로 배열을 지정할 수도 있다는 말이다. 통상 우리가 알고 있는 배열은 상수로 길이가 지정되어 있고 컴파일중에 메모리 stack 영역에 할당이 된다고 알고 있다. int arr[5]; //상수로 지정한 배열arr int i; scanf("%d", &i); int arr2[i]; //VLA C99부터 지원되는 VLA는 위의 코드처럼 사용자로부터 input받은 변수로도 배열을 지정할 수 있다. 기존에는 이러한 것이 불가하여 malloc, calloc과 같은 동적메모리 할당을 사용했는데 그럴 필요가 없다니... 너무 좋지 않은가? 그러나 꼭 그렇지만은 않다. VLA의 특..

SW/C 2021.09.03

[동적메모리할당] malloc, calloc 사용법

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

SW/C 2021.09.02
반응형