2011-07-30 34 views
13

Đọc qua hội đồng GCC tạo ra cho các tệp C trong dự án của tôi, tôi nhận thấy các hàm không được xuất ra trong tập hợp theo cùng thứ tự chúng xuất hiện trong tệp nguồn. Mục tiêu của việc sắp xếp lại này là gì và GCC sử dụng cái gì để quyết định thứ tự? (Chỉ là một tạo phẩm của các chức năng giữ cấu trúc dữ liệu?) Đây không phải là -freorder-functions, vì tôi không sử dụng -fprofile-arcs.GCC quyết định thứ tự các chức năng lắp ráp đầu ra như thế nào?

Trả lời

9

Các phần sau của giai đoạn tối ưu hóa liên thủ tục sử dụng tính năng truyền tải từ dưới lên của biểu đồ cuộc gọi; đó là thứ tự mà bạn thấy. Có một bài báo về thiết kế ban đầu của phần này của GCC here (từ trước đây; công cụ này xuất hiện lần đầu trong GCC 3.4).

Bạn có thể ngăn việc sắp xếp lại bằng cách sử dụng -fno-toplevel-reorder (hoặc -fno-unit-at-a-time cho các phiên bản GCC mới hơn), nhưng điều đó vô hiệu hóa một số tối ưu liên quan.

Các vấn đề liên quan