- C언어에서의 변수는 선언 장소와 키워드에 따라 각기 다른 공간에 저장된다.
- 변수의 수명도 선언 장소와 키워드에 따라 다르다.
영역 |
함수 또는 클래스 |
스택 영역(Stack Segment) |
지역변수, 매개변수와 같이 쓰고 지우는 일이 빈번한 데이터는 스택영역을 사용한다.
스레드 당 1개씩 생성되며, 기본 크기는 1MB이다. 이 용량을 초과할 경우 Stack Overflow가 발생한다. |
데이터영역(Data Segment) |
정적 데이터 (Static) |
코드 내에서 static 키워드로 생성된 데이터로써, 프로그램 생성시 할당되어, 프로그램이 종료 될 때까지 존재한다.
지역, 전역, 멤버 모두 정적 변수 영역에 생성 된다.
지역 정적 변수만 해당 코드가 수행되는 순간 초기화 되고, 나머지 정적 변수들은 프로그램 시작시에 임의의 순서로 초기화된다.
소멸 되는 순서는 모든 정적 변수가 임의의 순서로 소멸 된다. |
전역 데이터(Global) |
함수 블록 내에 포함 되지 않은 변수로서, 프로그램 생성시 할당되어, 프로그램이 종료 될 때까지 존재한다.
전역 변수들의 초기화와 소멸은 임의의 순서로 이루어 진다. |
동적 할당 데이터(Heap) |
힙을 사용하면 동적으로 데이터의 할당/해제할 수 있다. malloc이나 new와 같은 함수들이 힙에 메모리를 할당해주는 함수다.
프로그램은 기본적으로 1MB의 크기의 힙 메모리 영역을 할당한다. |
코드 영역 (Code Segment) |
함수 코드가 이 영역에 저장되며, 함수 코드는 프로그램이 실행될 때 변경되면 안 되므로 읽기 전용이다. |
레지스터 (Register) |
register 키워드를 붙여 생성된 변수로, CPU의 register에 생성 되므로 속도는 매우 빠르지만 개수에 제한이 있다. |