2011-07-30 6 views
13

GCC에서 어셈블리를 읽는 것은 프로젝트에서 C 파일을 생성하므로 함수가 어셈블리에서 소스 파일에 나타나는 순서대로 출력되지 않는다는 것을 알 수 있습니다. 이 재주문의 목표는 무엇이며 GCC는 어떻게 결과를 결정하는 데 어떤 경험적 방법을 사용합니까? (그것은 단지 데이터 구조를 유지하는 함수의 유물입니까?) -fprofile-arcs을 사용하지 않기 때문에 이것은 -freorder-functions이 아닙니다.GCC는 어셈블리 기능을 출력 할 순서를 어떻게 결정합니까?

답변

9

절차 간 최적화 단계의 이후 부분은 콜 그래프의 상향식 탐색을 사용합니다. 그것은 당신이 보는 순서입니다. GCC here의이 부분에 대한 원래 디자인에 대한 논문이 있습니다 (얼마 전부터 GCC 3.4에 처음 나왔습니다).

-fno-toplevel-reorder (또는 최신 버전의 GCC에 대해서는 -fno-unit-at-a-time)을 사용하여 재정렬을 방지 할 수 있지만 관련 최적화의 일부가 비활성화됩니다.

관련 문제