에일리어스
Alias analysis에일리어스 분석은 컴파일러 이론의 기술로, 스토리지 위치에 여러 가지 방법으로 액세스할 수 있는지 여부를 판단하기 위해 사용됩니다.2개의 포인터가 같은 장소를 가리키면 에일리어스라고 불립니다.
에일리어스 분석 기술은 보통 흐름 감도 및 컨텍스트 감도로 분류됩니다.이들은 may-alias 또는 must-alias 정보를 결정할 수 있습니다.별칭 분석이라는 용어는 종종 포인트 투 분석(특정 경우)과 함께 사용됩니다.
별칭 분석기는 프로그램의 별칭을 이해하는 데 유용한 정보를 만들고 계산하려고 합니다.
개요
일반적으로 에일리어스 분석은 개별 메모리 참조가 동일한 메모리 영역을 가리키는지 여부를 결정합니다.이를 통해 컴파일러는 프로그램의 어떤 변수가 스테이트먼트의 영향을 받는지 판단할 수 있습니다.예를 들어, 구조의 멤버에 액세스하는 코드의 다음 섹션을 고려합니다.
p.후우 = 1; q.후우 = 2; i = p.후우 + 3; 여기에서는, 다음의 3개의 에일리어스 케이스를 생각할 수 있습니다.
- 변수 p와 q는 에일리어스를 지정할 수 없습니다(즉, 같은 메모리 위치를 가리키지 않습니다).
- 변수 p와 q는 에일리어스여야 합니다(즉, 항상 같은 메모리 위치를 가리킵니다).
- p와 q 에일리어스인지 아닌지는 컴파일 시 결정되지 않습니다.
p와 q가 에일리어스를 할 수 없는 경우i = p.foo + 3;로 변경할 수 있다i = 4p와 q의 에일리어스가 필요한 경우i = p.foo + 3;로 변경할 수 있다i = 5왜냐면p.foo + 3=q.foo + 3두 경우 모두 에일리어스 지식에서 최적화를 실행할 수 있습니다(같은 위치를 갱신하는 다른 스레드가 현재 스레드와 인터리브할 수 없거나 언어 메모리 모델에 의해 이러한 업데이트가 현재 스레드에 즉시 표시되지 않는 것을 전제로 합니다).한편, p와 q 에일리어스 여부를 알 수 없는 경우에는 최적화를 실행할 수 없으며 결과를 얻기 위해 코드 전체를 실행해야 합니다.에일리어스를 알 수 없는 경우 2개의 메모리 참조는 may-alias 관계를 갖는 것으로 간주됩니다.
별칭 분석 수행 중
별칭 분석에서는 프로그램의 메모리를 별칭 클래스로 나눕니다.에일리어스 클래스는 서로 에일리어스를 지정할 수 없는 분리된 위치 세트입니다.여기서의 논의에서는, 여기서 행해지는 최적화는 프로그램의 낮은 수준의 중간 표현에서 일어난다고 가정한다.이는 프로그램이 이진 연산, 점프, 레지스터 간 이동, 레지스터 간 이동, 메모리에서 레지스터 간 이동, 분기 및 함수 호출/반환으로 컴파일되었음을 의미합니다.
유형 기반 별칭 분석
컴파일되는 언어가 type safe이고 컴파일러의 type checker가 올바르며 언어에는 로컬 변수(ML, Haskell, Java 등)를 참조하는 포인터가 없는 경우 몇 가지 유용한 최적화가 이루어집니다.[1]두 개의 메모리 위치가 서로 다른 에일리어스 클래스에 있어야 하는 경우가 많습니다.
- 서로 다른 유형의 두 변수가 동일한 메모리 위치를 동시에 공유할 수 없는 강력한 유형의 메모리 참조가 없는(즉, 메모리 위치에 대한 참조를 직접 변경할 수 없는) 언어의 속성이기 때문에 동일한 에일리어스 클래스에 있을 수 없습니다.
- 현재 스택 프레임의 로컬 할당은 다른 스택프레임의 이전 할당과 동일한 에일리어스 클래스에 포함할 수 없습니다.새로운 메모리 할당은 다른 모든 메모리 할당에서 분리해야 하기 때문입니다.
- 일반적으로 타이핑 규율에서는 같은 유형의 레코드만 에일리어스로 지정할 수 있기 때문에 각 레코드 유형의 각 레코드 필드에는 고유한 에일리어스 클래스가 있습니다.한 유형의 모든 레코드는 메모리에 동일한 형식으로 저장되므로 필드 자체의 별칭만 지정할 수 있습니다.
- 마찬가지로 특정 유형의 각 배열에는 고유한 별칭 클래스가 있습니다.
코드에 대한 에일리어스 분석을 수행할 때 메모리에 대한 모든 로드 및 저장에는 클래스로 라벨을 붙여야 합니다.다음으로 메모리 스타일 })와 B_에 ii의 별칭 클래스가 지정되면 ( ij의 경우 스타일 j i( 스타일 i=의 경우 Ai 스타일 A_{i}-display style B_{j})의 별칭 클래스가 지정됩니다 ij를 지정하면 메모리 위치는 에일리어스가 되지 않습니다.
흐름 기반의 에일리어스 분석
흐름 기반 분석은 참조 또는 유형 캐스팅이 있는 언어의 프로그램에 적용할 수 있습니다.유형 기반 분석 대신 또는 보완을 위해 흐름 기반 분석을 사용할 수 있습니다.흐름 기반 분석에서는 각 메모리 할당 및 주소가 사용된 모든 글로벌 및 로컬 변수에 대해 새로운 에일리어스 클래스가 생성됩니다.참조는 시간에 따라 여러 값을 가리킬 수 있으므로 여러 에일리어스 클래스에 속할 수 있습니다.즉, 각 메모리 위치에는 단일 에일리어스 클래스가 아닌 에일리어스 클래스 세트가 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Diwan, Amer; McKinley, Kathryn S.; Moss, J. Eliot B. (1998). "Type-based alias analysis". Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation - PLDI '98. Montreal, Quebec, Canada: ACM Press: 106–117. doi:10.1145/277650.277670. ISBN 978-0-89791-987-6.
- Appel, Andrew W. (1998). Modern Compiler Implementation in ML. Cambridge, UK: Cambridge University Press. ISBN 0-521-60764-7.
외부 링크
- 에일리어스 분석의 분류법과 응용 - 분야를 소개하는 석사 논문.