2011-02-16 7 views

답변

2

프레임 포인터는 예외 실행시 예외를 제외하고 올바른 실행에 실제로 필요하지 않습니다. 동적 스택 증가는 일반적으로 일종의 프레임 포인터를 요구하지만 특정 레지스터에 연결되지 않고 오히려 일반적인 데이터 흐름 분석을 통해 할당됩니다.

기본적으로 은 FP를 고정 레지스터 할당에서 의사 레지스터로 강등시키고 초기화를 데드 - 스토어 제거의 대상으로 만듭니다. 첫 번째 질문에 대한 대답은 '아니오'입니다. 항상 생략하지 않습니다.

0

mips 사람이 아니지만 시스템에 적용해야하는 항목 : 스택을 어느 지점에서 정렬해야하는 경우 프레임을 사용하여 원본 포인터를 저장해야합니다 (스택 주소 및 정렬은 알고 있어야 함)

1

아니요, 프레임 포인터가 일반적으로 필요하지 않습니다. 컴파일러는 스택 포인터를 기준으로 로컬 변수에 액세스 할 수 있으며 특수 프레임 포인터가 필요하지 않습니다.

그럼에도 불구하고 표준 프레임 포인터 설정 시퀀스는 디버거가 호출 포인터 정보를 사용하여 호출 스택을 재구성 할 수 있기 때문에 (-g으로 컴파일되지 않은 경우에도) 충돌 한 프로그램을 디버깅 할 때 도움이됩니다. 프레임 포인터가 없으면 하나의 스택 프레임이 시작되고 다음 프레임이 끝나는 지점을 파악할 정보가 없습니다.

따라서 을 사용할 때 충돌이 발생할 경우 훨씬 더 어려운 디버깅 성능을 제공합니다. 코드의 성능이 중요한 부분이 작은 루프이고 어떤 함수도 호출하지 않으면 프레임 포인터를 생략해도 약간의 이점이 있습니다.