Đọ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?
13
A
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
- 1. Lắp ráp được giải quyết bằng .NET như thế nào?
- 2. Làm sạch đầu ra lắp ráp x86_64 bằng gcc?
- 3. Lắp ráp đường vòng và lắp ráp GCC (Linux)
- 4. Hiểu đầu ra lắp ráp GHC
- 5. movq chức năng lắp ráp
- 6. Ngôn ngữ lắp ráp LLVM ổn định như thế nào?
- 7. Cuộc gọi lắp ráp trong GCC?
- 8. Định nghĩa chức năng sau hoạt động như thế nào?
- 9. Trình biên dịch C# quyết định phát ra các tham chiếu lắp ráp có thể nhắm mục tiêu lại như thế nào?
- 10. Lắp ráp Maven: lắp ráp
- 11. Trình tự lắp ráp liên kết COM
- 12. GCC/objdump: Tạo ra lắp ráp compilable/buildable (xen kẽ với C/C++)?
- 13. Gọi lắp ráp ARM từ C, GCC (kim loại trần)
- 14. MSTest xác định thứ tự để chạy các phương pháp thử nghiệm như thế nào?
- 15. Tại sao GCC giữ các chức năng trống?
- 16. Chuyển đổi một nhà lắp ráp nội tuyến GCC để delphi lắp ráp nội tuyến
- 17. Biên dịch lắp ráp intel với gcc/mingw
- 18. chức năng phải ngắn như thế nào?
- 19. Autofac trang trí các generics mở được đăng ký sử dụng chức năng quét lắp ráp
- 20. Làm cách nào để chỉ định các phần đầu ra trong các tệp C được biên dịch bằng GCC?
- 21. Cơ sở dữ liệu định vị địa lý được lắp ráp như thế nào?
- 22. Mã C gọi mã lắp ráp (ví dụ: strlen được tối ưu hóa) như thế nào?
- 23. Lắp ráp tuần tự hóa. Có cần thiết hay không?
- 24. chức năng cho các hàm mangle/demangle
- 25. Đầu ra XML theo thứ tự sai
- 26. cấm lắp ráp nội tuyến bằng g ++ (gcc) hoặc clang (llvm)
- 27. Học lắp ráp ARM
- 28. Lắp ráp cánh tay - Chức năng gọi với hơn 4 đối số
- 29. Làm thế nào để sử dụng C xác định trong bộ lắp ráp ARM
- 30. Lắp ráp C# nào chứa Invoke?