▶ 변수와 상수의 영역이란?
ㆍ변수와 상수가 프로그램에 걸쳐서 영향을 미칠 수 있는 범위를 의미한다.
ㆍ변/상수의 종류에 따라서 해당 변/상수에 접근할 수 있는 범위가 달라진다
ㆍ 바꿔 말해 서로 다른 영역에서만 유효한 동일한 이름을 지닌 변/상수가 존재할 경우 각각 변/상수는 별개
ㆍ c/c++에선 {}의 조합을 통해 특정 영역의 시작과 끝을 나타내는 것이 가능하다.
▶ C / C++ 언어의 변수 상수 종류
1. 로컬 : 특정 영역에서만 접근이 가능한 변/상수를 의미
2. 전역 : 프로그램 전체에서 접근이 가능한 변/상수를 의미
ㆍ 잘못 사용하면 메모리 누수가 발생하기 때문에 주의를 요함
ㆍ 모든 함수 밖에서 선언하면 된다.
3. 정적 로컬 : 특정 영역에서만 접근이 가능하다
ㆍ 단 지역변수와 달리 해당 변수의 값이 항상 유지되는 변/상수를 의미
ㆍ 특정 함수나 스코프 내에서 static 키워드로 선언하면 된다.
4. 정적 전역 : 전역변수와 달리 해당 변/상수가 선언된 파일에서만 접근이 가능한 변/상수
ㆍ localVar은 function함수 내부에서만 접근이 가능하며 함수가 종료되면 사라진다.
ㆍ staticLocalVar은 함수 내부에서만 접근 가능하지만 함수 호출 사이에도 그 값이 유지된다.
ㆍ globalVar은 프로그램 어디서든 접근이 가능하다
ㆍ static GlobalVar은 선언된 파일 내에서만 접근할 수 있다.
▶ 변수의 생명 주기 (Life Cycle)
ㆍ 유형에 따라 라이프 사이클이 다르다
1. 지역변수
ㆍ 지역변수는 함수 또는 스코프 내에 선언된다.
ㆍ 그들이 선언된 함수 또는 스코프가 실행되는 동안이다.
ㆍ 즉 함수가 호출될 때 생성되고 함수가 반환하면 소멸한다.
2. 전역변수
ㆍ 프로그램의 시작부터 종료까지
ㆍ 애플리케이션의 생명주기와 같다.
3. 정적변수
ㆍ 정적 지역변수 : 해당 영역 내에서만 접근 가능하지만 그 값은 프로그램 실행 동안 유지됨
ㆍ 정적 전역번수 : 파일 범위 내에서만 접근 가능하며 프로그램 시작부터 종료까지 그 값이 유지됨
4. 동적메모리
ㆍ new나 malloc() 등을 사용해 직접 할당한 메모리.
ㆍ 개발자가 직접관리해야함. 메모리를 할당(new or malloc()) 할 때 생성되고 명시적으로 해제(delete or free)
할 때까지 계속 존재한다.
▶ Life Cycle에서 메모리 순환
ㆍ 변수가 메모리를 할당받고, 사용하며, 마지막으로 해제되는 과정을 의미한다.
1. 메모리 할당(Allocate)
ㆍ 변수가 생성될 때 방생
ㆍ 이 시점에서 운영체제는 프로그램에 필요한 메모리를 할당해 줌
ㆍ 동적 메모리 할당의 경우 개발자가 new나 malloc() 함수를 사용해 명시적으로 메모리를 요청해야 함
2. 메모리 사용(Use)
ㆍ 변수가 생명 주기 동안 계속 발생함.
ㆍ 이 시점에서 프로그램은 할당된 메모리에 데이터를 읽거나 쓸 수 있음
3. 메모리 해제(Release)
ㆍ 변수가 더 이상 필요하지 않을 때 발생
ㆍ 정적 / 지역 변수의 경우 스코프에 벗어날 때 자동으로 해제됨.
ㆍ 종적으로 할당된 메모리는 개발자가 delete나 free() 함수를 호출해 명시적으로 해제해야 함
4. 메모리 풀(Memory Pool)로 반환
ㆍ 일반적인 상황에서 메모리는 해제되면 운영체제에 반환되어 다른 프로세스나 애플리케이션이 사용할 수 있게 됨
ㆍ 그러나 메모리풀이라는 개념은 애플리케이션 내부에서 재사용 가능한 "풀" 혹은 " 더미"로 관리되는 것을 의미함
ㆍ 주로 성능 최적화 목적으로 사용된다.
ㆍ 예를 들어 반복해서 같은 크기의 메모리 블록을 요청하는 경우 운영체제에서 매번 새로운 요청을 하는 대신 한 번에 여러 블록을 요청하고 낭비 없게 재사용할 수 있다.
'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글
정수 (0) | 2024.09.15 |
---|---|
컴파일 과정과 전처리기 (0) | 2023.10.09 |
상수 (1) | 2023.10.09 |
함수 (1) | 2023.10.09 |
조건문 (1) | 2023.10.09 |