반응형

나는 원래 배열을 선언할 때 길이를 무조건 컴파일 타임 상수로 써야한다고 알고 있었고 그렇게 사용해오고 있었다.

하지만 개발하다보니 코드 낭비가 심했다. (쓸데없이 동적 할당을 하거나, 포인터 배열을 동적으로 사용하고 싶을 때 등)

 

코드를 낭비하는 것을 해결하고 싶어서 혹시나 하는 마음에 사용해보니 오류가 뜨지 않고 잘 사용되었다. 

컴파일은 리눅스에서 하다보니 당연하게도 GCC를 사용하여 컴파일 했었는데 되는 이유를 찾아보니...

 

C99 부터 가변길이배열(VLA)를 지원 한다는 것이였다!! 

VLA란 배열의 크기를 컴파일할 때 정하지 않고 실행하면서 정할 수 있도록 하는 기능이다.

 

VLA의 특징과 malloc과의 차이점에 대해서 말해보자면

malloc VLA
보통 힙에 저장된다. 보통 스택에 저장된다.
긴 배열에 적합하다 짧은 배열에 적합하다.
free, 메모리 관리 필수 굉장히 수동적이다. 사용자가 편하고 자동적이다.

 

하지만 이 기능은 스택오버플로우의 위험이 있어 지원하지 않는 컴파일러도 있는데 그 예로,

Visual Stdio의 컴파일러인 vc++컴파일러는 VLA기능을 사용하지 못한다.

이런 식으로 말이다.

 

하지만 GCC를 기본 컴파일러로 제공하는 JetBrain사의 CLion IDE를 사용하여 컴파일 해보면...

오류 없이 잘 나오는 모습이다.

 

가변길이배열을 사용하고 싶다면 직접 GCC나 지원하는 컴파일러를 설치하여 컴파일을 후 사용하도록 하자.

똑같은 코드인데도 컴파일러에 따라 되는 문법이 있고 안되는 문법이 있다. 동작하는 것에 집중하지 말고 동작하는 환경에 대해서도 공부할 필요가 있겠다.  

 

VS말고 CLion도 사랑해주세요!!

반응형