.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입니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.