형한정어란, 변수에 적용하는 문법으로 컴파일러 최적화에 직접적인 영향을 준다.
📌 핵심 예약어
- const ( 상수화 )
- volatile ( 최적화 대상에서 제외 )
📌 심볼릭 상수
- 특정 상수에 이름을 부여해 그 의미가 명확하도록 표현하는 것을 말한다.
- 형한정어 const로 구현한다.
- #define 전처리기로 구현한다. ( 컴파일 전, 전처리 단계에서 상수화 처리 )
📌 컴파일러 최적화
컴파일러가 컴파일 과정에서 코드 변환 및 재배치를 수행하는 것을 말한다.
🔹 컴파일러 최적화의 목적
- 실행 속도를 개선
- 코드 크기를 감소
- 메모리 사용을 최적화
컴파일러 최적화는 일반적으로 프로그램을 빌드( 디버그 모드 )하면 작동하지 않는다.
릴리즈 모드로 빌드를 하게 되면 이때 최적화를 실시한다.
불필요한 코드를 제거하는 최적화 방식 적용시 특정 변수에 대한 의존관계를 분석해 최적화가 가능하다.
포인터는 최적화에 방해 요소가 될수 있다. 주소만 있고, 해당 포인터가 가리키고 있는 대상의 크기를 알 수 없기 때문
컴파일러 최적화를 돕는 코드가 좋은 코드라고 생각할 수 있다.
개발자 입장에서는 const를 적절한 곳에 붙여 최적화를 도와주면 된다.
🔹 예시
int a = 0;
for(int i=0; i< 10; i++)
{
a = 5;
}
printf("a: %d\n", a);
위와 같은 코드가 있을때, 릴리즈 모드로 빌드하면 어떤일이 일어날까?
컴파일러는 for문을 여러번 돌아도 a에 5만 넣고 값이 변하지 않기 때문에
for문 자체를 삭제하고 a에 5를 넣고 끝낸다.
컴파일러가 최적화를 하지 못하게 하려면 어떻게 해야할까?
그때 필요한 형한정어가 volatile이다.
volatile int a = 0; // volatile를 붙여서 최적화에서 제외시킨다.
for(int i=0; i< 10; i++)
{
a = 5;
}
printf("a: %d\n", a);
위와 같이 volatile을 붙이고 빌드하면 다음과 같이 코드가 생성된다.
어셈블리어를 살펴보면 for문도 반복하는 것을 확인할 수 있다.
'강의 정리 > 인프런' 카테고리의 다른 글
[인프런] inline 함수와 컴파일러 최적화 (0) | 2025.03.17 |
---|---|
[인프런] 분할 컴파일과 외부 변수 (0) | 2025.03.13 |
[인프런] 함수 호출 규약 (0) | 2025.03.11 |
[인프런] 매개변수 전달 살펴보기 (0) | 2025.03.11 |
[인프런] 매개변수 전달 기법 (0) | 2025.03.11 |