.map 파일의 'Stack local' 및 'Stack prev'란 무엇입니까?

기술노트 24702

아키텍처:

8051

컴포넌트:

linker

업데이트:

2021-07-16 오전 1:13

소개

정적 오버레이 시스템 맵(-xo) 링크 옵션(IAR XLINK Linker)이 지정된 경우 목록 파일에 다음 정보가 포함됩니다:

"Stack locally"은 함수가 사용하는 바이트 수입니다. "Stack prev"는 "children"이 사용하는 바이트 수입니다(해당 함수에서 호출된 함수에서 호출되지 않은 리프까지).

값을 합산하는 방법을 이해하는 핵심은 각 수준 X 항목이 바로 앞에 나열되고 수준 X+1 이상인 항목에서만 문제가 된다는 것입니다. 운영 체제의 파일 시스템에 있는 파일 및 디렉토리와 유사합니다. 각 수준은 다른 디렉터리 및 일부 디스크 사용 데이터가 포함된 디렉토리입니다. 각 디렉토리는 자신과 디렉토리가 포함하는 디렉토리에만 관련이 있습니다.

연습 예제

Level Name
4 foo
6 bar
5 baz
5 frotz
4 qwerty

이 예에서 qwerty는 frotz, baz 및 bar의 스택 사용량을 포함하지만 foo가 상위 레벨(qwerty는 foo를 호출하지 않음)을 포함하지 않습니다. frotz는 어떠한 통화도 하지 않습니다(만약 존재한다면 frotz가 frotz를 앞서는 레벨 6 항목으로 나열됨). 이 막대는 레벨 6이며 막대가 baz에 속하기 때문에 쿼티 트리에 배치되는 것은 문제가 되지 않습니다.

실무 예제

                    Stack prev        Stack locally
RSTACK CSTACK RSTACK CSTACK

4 getA 0 0 4 0
4 getB 0 0 4 0
4 getC 0 0 2 0
4 getD 0 0 2 0
4 getE 0 0 2 0
3 Foo2 4 0 2 17
2 Foo1 6 17 2 8

이 예에서, 메인 (레벨 1)은 Foo1 (레벨 2)을 호출하고, Foo2 (레벨 3)는 차례로 여러 개의 리프 (레벨 4)를 호출합니다.

일부 리프는 4바이트의 RSTAK를 사용하고 다른 리프는 2를 사용합니다. 이 문제는 레벨 3의 "Stack prev" 열에 있습니다. 레벨 X의 "Stack prev"가 레벨 X+1의 "Stack prev" + "Stack local"의 가장 높은 합계입니다.

이 예제의 수준 3은 0+4, 0+4, 0+2, 0+2, 0+2입니다. 최대값은 4이므로 수준 3은 RSTAK 예측값 4와 CSTAK 예측값 0입니다.

이 예제에서 수준 2의 경우 대안이 하나이므로 4 + 2 = 6 및 0 +17 = 17입니다.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.