malloc
,new
,free
,delete
(필요한 메모리 크기를 컴파일 할 때는 알 수 없음)(운영체제에 메모리를 요청하고, 가상 메모리를 사용하기 때문에 메모리 할당, 해제가 속도가 느림)출처 :
용어 :
- Scope(영역)
- 변수의 참조자가 존재하는 영역
- scope 의 종류 : block, function, function prototype, file (global variable, 전역 변수)
- Linkage(연결상태)
- 전역 변수 (file scope variables) 은 external or internal linkage(static) 가능.
- 컴파일러의 변환 단위(translation unit) 은 c 파일 1개임. c 파일간의 연결은 링커가 담당.
- Duration(지속기간) : 메모리에서의 지속 시간
static
변수
- static 변수 : 전역 변수 / 지역 변수 +
static
keyword- 선언만 해도 '0' 값으로 컴파일러가 알아서 초기화가 됨. static 변수는 초기화가 한번만 됨. (컴파일 타임에 되므로)
- 프로그램이 시작 될 때 메모리에 할당되고, 프로그램이 끝날때까지 유지 됨. (Data, BSS segment 에 위치). 컴파일 타임에 메모리 주소가 정해져서, Binary 에 하드 코딩 됨.
- Scope 를 현재 영역(블록, 파일)으로 한정 지음. (전역변수에
static
keyword 사용 시extern
불가)
Automatic
Register
Static with internal linkage
static
keyword 로 선언한 경우.Static with external linkage
Static with no linkage
static
keyword 로 변수를 선언하는 경우.static
변수의 수명은 block 및 함수 종료 시 종료 됨 (지역 변수와 동일)static
변수로 초기화 한 경우, 동일 함수를 호출 할 경우 두번째 초기화 sentence는 생략이 되고, 함수를 종료 한다고 하더라도 이전 호출 시의 값이 유지가 됨. (재귀 함수 등에서 활용 가능)ex:
void func1(){
static int a = 1;
std:: cout << a << endl;
a++;
}
using namespace std;
int main(){
func1(); // 1 이 출력 됨.
func1(); // 2 가 출력 됨.
}