티스토리 뷰

728x90
반응형

알고리즘 공부를 하면서 막상 동적 할당을 사용하려는 경우에 왜 정적으로 할당하지 않고 동적으로 할당하는지에 대한 의문이 생겼다. 내가 동적 할당을 사용하는 이유는 '메모리를 효율적으로 사용하기 위해서'라는 생각을 막연하게 가지고 있었다. 그래서 이유를 제대로 알기 위해서 찾아봤다. 

아래 블로그에 내가 궁금했던 굉장히 자세한 내용들이 설명 돼 있다. 참고하자! 

 

동적 메모리 할당 개념잡기

동적 메모리 할당 개념잡기 출처 : http://www.winapi.co.kr/, Win32 Api 연구 사이트 작성 : 몽키몽키(c...

blog.naver.com

 

 

그런데 글을 읽다보면 헷갈리는 부분들이 생긴다. gcc환경에서는 아래와 같은 코드가 컴파일이 문제없이 된다.

#include <stdio.h>
int main() {
	int n;
	scanf("%d", &n);
	int arr[n];
	for (int i = 0; i < n; i++) {
		arr[i] = i;
		printf("%d",arr[i]);
	}
}

 

하지만 Visual Studio에서는 컴파일이 안되는 경우가 있었다. 그래서 되는 경우가 있고 안 되는 경우가 있어서 굉장히 헷갈렸다. 그래서 구글링을 해보니 VLA이라는 용어로 쓰이는 것을 알 수 있었다. 해당 개념도 아래 블로그에 자세히 설명돼 있다.

 

[C/C++]동적할당 없이 배열 크기를 변수로 정하고 싶다면, VLA!

VLA란?VLA는 Variable Length Arrays의 약어로, 가변길이배열을 뜻한다.보통 배열 크기는 상수로 ...

blog.naver.com

 

결론

즉 VLA을 사용하지 않고 동적할당을 하는 것이 일반적이다! 컴파일러마다 사용이 될 수도 안될 수도 있다.

또 정해지지 않은 변수의 크기만큼 배열로 선언해야 할 때, vector를 사용해서 선언하자.

 

728x90
반응형
댓글