컴파일 최적화
- 컴파일러가 수행
- 코드에서 논리적으로 당연한 내용을 제거
- 특정 변수에 대해 의존성이 존재하는 연산들을 구별
최적화 방해요소
- 변수의 수가 늘어날수록 타 변수와의 조합을 통해 논리적 구조가 복잡해짐 -> 변수 개수를 줄이기(상수화)
- 포인터 사용 -> 메모리 주소는 런타임 때 결정나기 때문에 자제해야 함
Const
- 형 한정어
- 상수화
- 컴파일은 이 변수를 숫자로 인식함
- 성능향상 가능
- 인자로 포인터를 받아서 데이터를 읽기만 할때 사용하면 좋음
- 심볼릭 상수 : 특정 숫자와 변수의 이름을 조합하여 좀 더 의미가 명확해 보이는 상수로 표현, 전처리기로도 가능(#define)
if (score <= 75)
보단
const int cutoff = 75; // 심볼릭 상수
if (score <= cutoff)
int nData = 0;
const int *pnData = &nData; // 데이터를 상수화
int const *pnData = &nData; // 포인터를 상수화, C++의 참조와 같음
Volatile
- 형 한정
- 컴파일러가 수행하는 최적화(연산 생략 등)를 제한
- 변수와 의존성이 있는 모든 연산이 생략되지 않음
volatile int nData = 0;
__inline
함수호출규칙
- __cdecl(default) : caller가 스택 정리
- __stdcall : callee가 스택 정리
- __fastcall : callee가 스택 정리