본문 바로가기

C,C++/공부 낙서

공부하면서 빠트린 것들 끄적끄적 - 컴파일타임, 런타임

int main()
{
	int a;
	int test_array_0[a];            //(1) 오류!

	int a = 4;
    	int test_array[a];      		//(2) 오류!
    
   	int test_array_2[4];			//(3) 정상!
}

 

스택 영역 : 프로그램이 실행되기 전, 컴파일 타임에서 사용하는 공간 (정적 할당)

힙 영역 : 할당해야할 메모리의 크기를 프로그램이 런타임을 하는 동안 결정해야한다면 사용하게 되는 공간 (동적 할당)

 

 

 

int test_array_2[4] 라는 변수는 배열이며, 이는 해당 배열의 첫 시작주소 (배열이 가리키는 포인터를 의미)를 가리키고 있습니다. 이 시작주소는 스택에 저장이 되지만 그 안의 정보들은 힙 영역에 저장됩니다.

int a = 4; 의 코드는 런타임때 실행이 되어 4라는 값이 a에 초기화가 되므로 

int test_array[a]; 라는 배열은 결국 첫 시작주소를 가리키기위한 스택에 저장이 되어야하며 컴파일 단계에서 실행이 됨을 의미합니다. 

 

 

따라서 이 코드는 오류를 발생시킵니다.