Specifier
제한자
- 제한자는 크게 Strorage Class Specifier(기억 공간 제한자)와 cv Specifier(\(\texttt{const-volatile}\) 제한자)로 분류된다.
cv Specifier (\(\texttt{const-volatile}\) 제한자)
- \(\texttt{const}\) 제한자와 \(\texttt{volatile}\) 제한자를 통칭하는 용어이다.
\(\texttt{const}\) Specifier (\(\texttt{const}\) 제한자)
- 처음 초기화된 후에는 프로그램이 해당 변수의 메모리 공간을 변경할 수 없게하는 제한자이다.
- \(\texttt{const}\) 키워드가 붙을 수 있는 위치는 크게 세 가지로 나뉜다.
1. 리턴형 앞
const double val = 0.0; // 변수 val은 한 번 초기화된 이후에는 다른 값으로 변경할 수 없다.
2. 포인터 변수의 리턴형 뒤 (포인터 변수 이름 앞)
int val 12;
int const *ptr = &val; // 포인터 변수 ptr의 값은 변경이 가능하나, 지시하고 있는 주솟값은 변경할 수 없다.
// 즉, const 키워드로 인해 포인터 ptr은 변수 val을 지시하는 것을 고수해야 한다.
3. 클래스의 멤버 함수 괄호 끝
// Ex. 멤버 함수의 괄호 끝에 붙는 const 키워드 예시
class Stock {
...
public:
void show() const;
...
};
void Stock::show() const {...} // show() 메서드는 Stock 클래스 객체의 데이터 값을 변경시키지 못한다.
\(\texttt{volatile}\) Specifier (\(\texttt{volatile}\) 제한자)
* Volatile : a.변덕스러운, 불안한, 휘발성의; n.휘발성 물질, 날개달린 동물
- 소스 코드가 변경하지 않더라도 특정 메모리 위치에 있는 값이 변경될 수 있음을 명시적으로 표현하는 키워드이다.
- 컴파일러가 수행하는 최적화*를 선택적으로 제한하려는 목적으로 만들어졌다.
* 여기서의 최적화란, Caching(캐싱)을 통한 방법을 의미한다.
ex) 짧은 구문 내에서 어떤 변수의 값이 두 번 이상 사용될 경우, 프로그램이 메모리를 계속해서 조사하지 않고 레지스터에서 캐싱한다면 실행속도가 개선된다.
- \(\texttt{volatile}\)을 선언하게 되면 컴파일러가 해당 변수의 데이터를 다룰 때 캐싱을 통한 최적화를 수행하지 못하게 한다.
- Embedded System(임베디드 시스템) 개발에 주로 사용되는 기능이다.
Specifier
제한자
- 제한자는 크게 Strorage Class Specifier(기억 공간 제한자)와 cv Specifier(\(\texttt{const-volatile}\) 제한자)로 분류된다.
cv Specifier (\(\texttt{const-volatile}\) 제한자)
- \(\texttt{const}\) 제한자와 \(\texttt{volatile}\) 제한자를 통칭하는 용어이다.
\(\texttt{const}\) Specifier (\(\texttt{const}\) 제한자)
- 처음 초기화된 후에는 프로그램이 해당 변수의 메모리 공간을 변경할 수 없게하는 제한자이다.
- \(\texttt{const}\) 키워드가 붙을 수 있는 위치는 크게 세 가지로 나뉜다.
1. 리턴형 앞
const double val = 0.0; // 변수 val은 한 번 초기화된 이후에는 다른 값으로 변경할 수 없다.
2. 포인터 변수의 리턴형 뒤 (포인터 변수 이름 앞)
int val 12;
int const *ptr = &val; // 포인터 변수 ptr의 값은 변경이 가능하나, 지시하고 있는 주솟값은 변경할 수 없다.
// 즉, const 키워드로 인해 포인터 ptr은 변수 val을 지시하는 것을 고수해야 한다.
3. 클래스의 멤버 함수 괄호 끝
// Ex. 멤버 함수의 괄호 끝에 붙는 const 키워드 예시
class Stock {
...
public:
void show() const;
...
};
void Stock::show() const {...} // show() 메서드는 Stock 클래스 객체의 데이터 값을 변경시키지 못한다.
\(\texttt{volatile}\) Specifier (\(\texttt{volatile}\) 제한자)
* Volatile : a.변덕스러운, 불안한, 휘발성의; n.휘발성 물질, 날개달린 동물
- 소스 코드가 변경하지 않더라도 특정 메모리 위치에 있는 값이 변경될 수 있음을 명시적으로 표현하는 키워드이다.
- 컴파일러가 수행하는 최적화*를 선택적으로 제한하려는 목적으로 만들어졌다.
* 여기서의 최적화란, Caching(캐싱)을 통한 방법을 의미한다.
ex) 짧은 구문 내에서 어떤 변수의 값이 두 번 이상 사용될 경우, 프로그램이 메모리를 계속해서 조사하지 않고 레지스터에서 캐싱한다면 실행속도가 개선된다.
- \(\texttt{volatile}\)을 선언하게 되면 컴파일러가 해당 변수의 데이터를 다룰 때 캐싱을 통한 최적화를 수행하지 못하게 한다.
- Embedded System(임베디드 시스템) 개발에 주로 사용되는 기능이다.