컴파일러 이론에서 dead code 제거는 dead code를 제거하는 컴파일러 최적화이다. Dead code는 실행 흐름 상 절대 실행되지 않거나 실행되더라도 영향을 주지 않는 코드를 말한다.
1. 일부 문맥에서 중요한 고려사항인 프로그램 사이즈를 줄이고 실행 중인 프로그램은 무관한 연산의 실행을 피하는 것을 허용하여 실행 시간을 줄인다.
2. 또한 프로그램 구조를 단순화함으로써 추가 최적화를 할 수 있게 한다.
3. 데드 코드는 절대 실행할 수 없는 코드와 죽은 변수(작성되었지만 절대 읽지 않는)에만 영향을 주는 즉, 프로그램에 므과한 코드를 포함한다.
int function(){
int a = 1;
int b = 2;
int c;
c= a * 3;
return c;
//아래는 실행되지 않는 코드들<-제거됨
b = 5;
printf("-------");
return 0;
}
위 예제에서, 단순한 분석은 변수 b가 첫 번째 할당 후 function 안에서 더 이상 사용되지 않음을 보여준다. 더욱이 b는 function 안의 로컬 변수로 정의되었고, function 밖에서 이 값을 사용할 수 없다. 따라서 변수 b는 죽고 optimizer는 저장 공간을 개선하거나 초기화를 제거할 수 있다. 게다가, 첫 번째 return문 이후 b에 대한 두 번째 할당에 도달하지 않는다. 따라서, 이 코드는 도달할 수 없기에 제거할 수 있다.
대부분의 고급 컴파일러는 가끔 다양한 레벨에서 dead-code 제거를 활성화하는 옵션을 가진다. 저레벨은 실행될 수 없는 명령어만 제거한다. 고레벨은 또한 사용되지 않는 변수를 위 공간을 예약하지 않을 수 있다. 아직 고레벨은 목적없는 명령이나 함수를 결정하고 제거할 수 있다. 일반적으로 dead-code 제거의 사용은 전처리를 통한 선택적 코드 포함에 대한 대안이다.
Tree shaking
CDE의 일종으로 주로 JavaScript에서 사용되며, 정적 분석을 통해 import나 export문을 기반으로 코드 의존성을 추적한다. 모듈에서 내보내지지 않은 함수, 클래스, 변수 등은 사용되지 않으므로 제거하여 최적화할 수 있다. 대표적인 도구로 Webpack, Rollup 등이 있다.
'Compiler' 카테고리의 다른 글
Python Virtual machine(PVM)-2 (0) | 2023.07.21 |
---|---|
Python Virtual machine(PVM)-1 (0) | 2023.07.20 |
Parsing expression grammar (0) | 2023.07.18 |
Dominance Frontiers (0) | 2023.06.16 |
Static single-assignment(SSA) (0) | 2023.06.15 |